Je liste et/ou tuple:Liste les éléments de liste/tuple qui sont différents de la variable?
MyVar = [0,0,0,0,1,0,0,0,0]
Et je veux compter les éléments de ce qui sont différents de 0
.
Comment faire?
Je liste et/ou tuple:Liste les éléments de liste/tuple qui sont différents de la variable?
MyVar = [0,0,0,0,1,0,0,0,0]
Et je veux compter les éléments de ce qui sont différents de 0
.
Comment faire?
Vous pourriez faire un sum
sur une expression conditionnelle du générateur qui ne nécessite pas de listes intermédiaires ou des opérations arithmétiques inutiles:
>>> sum(1 for element in MyVar if element != 0)
1
ou comme l'a souligné @ Jean-François Fabre:
>>> sum(1 for element in MyVar if element)
1
Si le MyVar
ne contient des nombres cela compte le nombre de valeurs non nulles.
ou 'sum (1 pour élément dans MyVar if élément)' –
Il y a une différence subtile entre "non zéro "et" est véridique "- et la question a demandé" pas zéro ". Dans ce cas, les deux donneraient le même résultat mais ils ne le seraient pas si la liste contenait des valeurs étranges comme des chaînes vides/tuples/dicts/lists. – MSeifert
bien sûr, je connais le bit de vérité ... –
Vous pouvez essayer:
>>> len(filter(lambda x: x != 0, MyVar))
1
ne fonctionne pas dans python 3. Vous n'avez pas besoin de passer un argument pour filtrer. Il suffit de passer 'None' BTW .:' len (liste (filtre (None, MyVar))) ' –
@ Jean-FrançoisFabre bonne chose il n'y a pas un tag python3 sur cette question :) – gobrewers14
pour moi maintenant les réponses devraient être python 3 conforme, sauf indication contraire. Python 2 est l'histoire. –
Essayez avec filter()
:
>>> my_var = [0, 0, 0, 0, 1, 0, 0, 0, 0]
>>> result = filter(lambda x: x > 0, my_var)
[1]
>>> print(len(result))
1
obtenir la longueur de la sous-liste de tous les éléments qui ne sont pas 0
MyVar = [0,0,0,0,1,0,0,0,0]
len([x for x in MyVar if x != 0])
>> 1
Probablement pas une bonne idée d'utiliser 'is' ou' is not' pour comparer des valeurs. C'est juste un détail d'implémentation que '0' est une constante et c'est seulement une constante dans CPython. '! =' serait mieux – MSeifert
Pas besoin de générer listes, juste:
len(MyVar) - MyVar.count(0)
Pas presque aussi efficace que l'une des réponses ci-dessus, mais simple et direct néanmoins
myVar = [0,0,0,0,1,0,0,0,0]
count = 0
for var in myVar:
if var != 0:
count += 1
Les éléments suivants doivent travailler:
>>> MyVar = [0,0,0,0,1,0,0,0,0]
>>> sum(map(bool, MyVar))
1
Il convertit la liste à une liste de booléens , avec la valeur True
ssi un élément est différent de zéro. Ensuite, il va résumer tous les éléments en considérant implicitement True
ayant une valeur 1 et False
ayant une valeur 0.
'sum (MyVar)' fait aussi l'affaire! –
cela pour 'MyVar = [0,0,0,0,1,0,0,0 , 3] 'retournera' 1 + 3 = 4' – JuniorCompressor
true L'exemple OP n'est pas représentatif, comme toujours :) –
Avec reduce de functools:
from functools import reduce
reduce((lambda x, y: x + (y>0)), MyVar, 0)
En utilisant somme de iterator:
sum(x != 0 for x in MyVar)
question similaires: https://stackoverflow.com/questions/15375093/python-get-number-of-items-from-list-sequence-with-condition-condition – user2314737