[1, 1, 1, 2, 2, 3].count(True)
>>> 3
¿Por qué este retorno 3
en lugar de 6
, si bool(i)
vuelve True
para todos los valores i
no es igual a 0
?entero a la conversión booleana método de conteo() en
[1, 1, 1, 2, 2, 3].count(True)
>>> 3
¿Por qué este retorno 3
en lugar de 6
, si bool(i)
vuelve True
para todos los valores i
no es igual a 0
?entero a la conversión booleana método de conteo() en
In [33]: True == 1
Out[33]: True
In [34]: True == 2
Out[34]: False
In [35]: True == 3
Out[35]: False
True
y False
son instancias de bool
, y bool
es una subclase de int
.
De the docs:
[Booleanos] representan la verdad valores de falso y verdadero. Los dos objetos que representan los valores False y True son los únicos objetos booleanos. El tipo booleano es un subtipo de enteros normales, y valores booleanos se comportan como los valores 0 y 1, respectivamente, en casi todos los contextos, la excepción de que cuando se convierte en una cadena, las cadenas "falso" o "Verdadero" son devueltos, respectivamente.
Esto se hace mejor con una comprensión:
>>> 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 recuento de la manera opuesta, ya que no hay ambigüedad sobre Falso es algo distinto de 0
>>> li=[1, 1, 1, 2, 2, 3, 0]
>>> len(li) - li.count(False)
6
Mejor aún:
sum(map(bool,li))
Debería haber aclarado que no era un código que en realidad tenía la intención de usar, solo estaba experimentando con el intérprete, encontrando casos extremos y tal. – FreeAsInGimme
@FreeAsInGimme: OK - bueno, tratando de ayudar ... –
No, no, agradezco la entrada. Cuanto más pueda aprender, mejor. – FreeAsInGimme