[1, 1, 1, 2, 2, 3].count(True)
>>> 3
Perché questo ritorno 3
invece di 6
, se bool(i)
restituisce True
per tutti i valori i
non uguali a 0
?intero alla conversione booleano metodo count()
[1, 1, 1, 2, 2, 3].count(True)
>>> 3
Perché questo ritorno 3
invece di 6
, se bool(i)
restituisce True
per tutti i valori i
non uguali a 0
?intero alla conversione booleano metodo count()
In [33]: True == 1
Out[33]: True
In [34]: True == 2
Out[34]: False
In [35]: True == 3
Out[35]: False
True
e False
sono casi di bool
, e bool
è una sottoclasse di int
.
Da the docs:
[booleani] rappresentano la verità falsi valori e vero. I due oggetti che rappresentano i valori False e True sono gli unici oggetti booleani. Il tipo booleano è un sottotipo di interi semplici, e booleano Valori si comportano come i valori 0 e 1, rispettivamente, in quasi tutti i contesti, l'eccezione è che quando convertito in una stringa, le stringhe "false" o "Veri" vengono restituiti, rispettivamente.
Questo è meglio fare con la comprensione:
>>> sum(1 for i in [1,1,1,2,2,3,0] if i)
6
o
sum(bool(i) for i in [1,1,1,2,2,3,0])
o contare in senso opposto, dal momento che non v'è alcuna ambiguità su False è qualcosa di diverso da 0
>>> li=[1, 1, 1, 2, 2, 3, 0]
>>> len(li) - li.count(False)
6
Meglio ancora:
sum(map(bool,li))
Avrei dovuto chiarire che non era il codice che intendevo effettivamente usare: stavo solo sperimentando l'interprete, trovando casi limite e così via. – FreeAsInGimme
@FreeAsInGimme: OK - beh, cercando di dare una mano ... –
No, no, apprezzo l'input. Più posso imparare, meglio è. – FreeAsInGimme