2015-07-01 23 views
12

Tüm tuple değerlerinin olup olmadığını kontrol etmenin en iyi/en etkili yolu nedir? Tüm parçaların üzerinde yineleme yapmam gerekiyor mu, yoksa daha iyi bir yol var mı? ÖrneğinBir tuple'ın Python'da boş/Hiçbir değeri olup olmadığını kontrol etmenin en iyi yolu nedir?

: Bu dizilerini kontrol etme

t1 = (1, 2, 'abc') 
t2 = ('', 2, 3) 
t3 = (0.0, 3, 5) 
t4 = (4, 3, None) 

, t1 hariç her kayıt düzeni çok boş değer var denir, yani Gerçek dönmelidir.

P.S. Orada bu soru şudur: Test if tuple contains only None values with Python ama hiçbiri Bu çok kolay

+4

Hepsi (tn) 'gibi değil mi? – jonrsharpe

+0

Oh, bu olurdu :) – Andrius

cevap

21

değerleri sadece hakkındadır:

not all(t1) 

döner Falset1 tüm değerler sıfırdan farklı/boş olmayan ve None olmasıyla mümkün olabilir. all kısa devreler, bu yüzden sadece ilk boş olana kadar olan elemanları kontrol etmek zorundadır, bu da onu çok hızlı yapar. Özel durumda İçin

+0

Ayrıca "namedtuple" için çalışıyor (çünkü bir alt sınıf, tabii ki) =) – jpmc26

+0

@TimPietzcker: üzgünüm, haklısın, çok hızlı okudum. – lodebari

+0

@TimPietzcke Aynı zamanda False (Boolean) değerini de kontrol ettiğimi düşünüyorum, eğer tuple'daki değerlerden biri yanlışsa (t1) False değerini döndürürse – sau

0

, sen all() fonksiyonunu kullanabilirsiniz, bu listenin tüm değerler doğru veya yanlış olduğunu kontrol eder, piton None yılında unutmayın, boş dize ve 0 yanlış kabul edilir.

Yani -

>>> t1 = (1, 2, 'abc') 
>>> t2 = ('', 2, 3) 
>>> t3 = (0.0, 3, 5) 
>>> t4 = (4, 3, None) 
>>> all(t1) 
True 
>>> all(t2) 
False 
>>> all(t3) 
False 
>>> all(t4) 
False 
>>> if '': 
...  print("Hello") 
... 
>>> if 0: 
...  print("Hello") 
2

tüm sağlanmıştır kullanan bir cevap: değerlerden biri 0 olduğu için

not all(t1) 

Ancak t3 böyle bir durumda, bu, doğru döndürür:

t3 = (0.0, 3, 5) 

'all' yerleşik anahtar sözcüğü, belirli bir yinelenebilir değerin tüm değerlerinin negatif bir boole (F) değerlendiren değerler olup olmadığını denetler. alse). 0, 0.0, '' ve Hiçbiri False olarak değerlendirilmez.

yalnızca (soru başlık da anlaşılacağı gibi) Hiçbiri test etmek istiyorsanız, bu çalışır:

any(map(lambda x: x is None, t3)) 

t3 unsurlarının herhangi hiçbiri, ya da yanlış, bu doğru döndürür hiçbiri arasında ise onlar