2012-10-07 22 views
7
[1, 1, 1, 2, 2, 3].count(True) 

>>> 3 

neden 0 için i eşit değil tüm değerler için bool(i) döner True eğer bu dönüş 3 yerine 6?tamsayı

cevap

3
In [33]: True == 1 
Out[33]: True 

In [34]: True == 2 
Out[34]: False 

In [35]: True == 3 
Out[35]: False 

True ve Falsebool örnekleri olan ve boolint bir alt sınıfıdır. the docs itibaren

:

[Booleans] hakikati temsil Yanlış ve Doğru değer verir. False ve True değerlerini temsil eden iki nesne , yalnızca Boole nesneleridir. Boole tipi düz tamsayılar bir alt tipi olduğunu ve Boole neredeyse tüm bağlamlarda, istisna olmak olduğunu, dizeleri "Yanlış" bir dizeye dönüştürüldüğünde veya sırasıyla değerler 0 ve 1 gibi davranacaksan değerleri "True" sırasıyla döndürülür.

2

Bu iyi bir anlama ile yapılır: Yanlış hakkında belirsizlik yoktur çünkü

>>> sum(1 for i in [1,1,1,2,2,3,0] if i) 
6 

veya

sum(bool(i) for i in [1,1,1,2,2,3,0]) 

Veya tam tersi şekilde saymak 0

dışında bir
>>> li=[1, 1, 1, 2, 2, 3, 0] 
>>> len(li) - li.count(False) 
6 

Daha da iyisi:

Ben aslında kullanmak isteyen edildi kod olmadığını açıklığa gerekirdi
+0

sum(map(bool,li)) 
- Sadece tercüman deney yaptığını, sınır durumları ve bu tür bulma. – FreeAsInGimme

+0

@FreeAsInGimme: Tamam - iyi, yardım etmeye çalışıyorum ... –

+0

Hayır, hayır, girişi takdir ediyorum. Ne kadar çok şey öğrenebilirim, o kadar iyi. – FreeAsInGimme