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
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,
Python listesi kontrol öğesi başka bir...
Bir dize olmadığını kontrol 10 karakte...
Nasıl bir dize bir sayı (yüzen) olup o...
Ne'kontrol s kurallı şekilde pyth...
En zarif şekilde, string Python boş ol...