[1, 1, 1, 2, 2, 3].count(True)
>>> 3
Dlaczego ten powrót 3
zamiast 6
, jeśli bool(i)
zwrotów True
dla wszystkich wartości i
nie równych 0
?Integer do logicznej konwersji w sposób count()
[1, 1, 1, 2, 2, 3].count(True)
>>> 3
Dlaczego ten powrót 3
zamiast 6
, jeśli bool(i)
zwrotów True
dla wszystkich wartości i
nie równych 0
?Integer do logicznej konwersji w sposób count()
In [33]: True == 1
Out[33]: True
In [34]: True == 2
Out[34]: False
In [35]: True == 3
Out[35]: False
True
i False
są przypadki bool
i bool
to podklasa int
.
Od the docs:
[Boolean] reprezentują prawdę wartości Fałsz i Prawda. Dwa obiekty reprezentujące wartości False i True są jedynymi obiektami typu Boolean. Typ logiczny jest podtypem zwykłych liczb całkowitych, a Boolean wartości zachowywać się jak wartości 0 i 1, odpowiednio, w prawie wszystkich kontekstach, Wyjątkiem jest, że po przeliczeniu na łańcuch, łańcuchy „false” lub "True" są zwracane, odpowiednio.
to lepiej zrobić z zrozumieniem:
>>> sum(1 for i in [1,1,1,2,2,3,0] if i)
6
lub
sum(bool(i) for i in [1,1,1,2,2,3,0])
Albo liczyć w przeciwną stronę, ponieważ nie ma niejednoznaczności o Fałsz jest czymś innym niż 0
>>> li=[1, 1, 1, 2, 2, 3, 0]
>>> len(li) - li.count(False)
6
Jeszcze lepiej:
sum(map(bool,li))
Powinienem był wyjaśnić, że to nie jest kod, którego faktycznie zamierzałem użyć - po prostu eksperymentowałem z tłumaczem, znajdowałem przypadki skrajne i takie. – FreeAsInGimme
@FreeAsInGimme: OK - cóż, próbuję pomóc ... –
Nie, nie, doceniam dane wejściowe. Im więcej mogę się nauczyć, tym lepiej. – FreeAsInGimme