SORU
14 Ocak 2013, PAZARTESİ


etkili bir şekilde kontrol dize Python bir karakter içerir

Ne bu Python s sadece bir karakter oluşan bir dize kontrol etmek için etkili bir yoldur, 'A' söyle? Bu gibi davranır all_equal(s, 'A') gibi bir şey:

all_equal("AAAAA", "A") = True

all_equal("AAAAAAAAAAA", "A") = True

all_equal("AAAAAfAAAAA", "A") = False

Olacaktır görünürde verimsiz iki yolu vardır: ilk listeye dize dönüştürmek ve her öğe kontrol edin, ya da ikinci bir düzenli ifade kullanmak için. Daha etkili yollar ya da en iyisi Python yapabilir bunlar var mı? Teşekkürler.

CEVAP
14 Ocak 2013, PAZARTESİ


Bu şimdiye kadar en hızlı, birkaç kat daha hızlı mükemmel mgilson's timing suite count(), o bile daha iyidir:

s == len(s) * s[0]

Burada tüm kontrol sadece hangi Python C kodu içinde yapılır:

  • (s) ayırır len karakterler;
  • doldurur ilk karakter boşluğu;
  • iki dizesini karşılaştırır.

Uzun bir dize ise, daha fazla zaman bonus. Mgilson yazar olarak, ancak dize bir kopyasını oluşturur, eğer dize uzunluğunu simgeler milyonlarca çoğu ise, bir sorun olabilir.

Zamanlama sonuçlarından görüldüğü gibi, genel olarak görev çözmek için en hızlı yolu her simge için herhangi bir Python kodunu çalıştırmak değil. Ancak, set() çözüm de Python Kütüphanesi C kodu içinde iş yok, ama yine de yavaş, muhtemelen Python nesne arabirimi ile işletim dize yüzünden.

UDP:Boş dizgi ile ilgili. Ne güçlü bir şekilde göreve bağlıdır. Eğer bu görev ise "eğer bir dize tüm semboller aynı olup olmadığını kontrol edin", s == len(s) * s[0] geçerli bir cevap (semboller bir hata ve özel durum ok). Eğer görev "kontrol edin, eğer orada bir benzersiz sembol", boş bir dize gerektiğini bize Yanlış ve cevap s and s == len(s) * s[0] bool(s) and s == len(s) * s[0] eğer tercih alma boolean değerleri. "Eğer farklı semboller varsa onay", boş bir dize için sonuç Doğru cevap not s or s == len(s) * s[0]. olarak görev anlarsak sonunda,

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Edge-CGI 3D Tutorials and more!

    Edge-CGI 3D

    11 HAZİRAN 2013
  • Garrett Müller

    Garrett Mül

    26 HAZİRAN 2009
  • Hak5DarrensVlog

    Hak5DarrensV

    11 EYLÜL 2009