J'ai une liste comme celle-ci
myList = [0.0 , 0.0, 0.0, 2.0, 2.0]
Je voudrais trouver l'emplacement du premier numéro de la liste qui n'est pas égal à zéro.
myList.index(2.0)
Fonctionne dans cet exemple, mais parfois le premier nombre non nul sera 1 ou 3.
Y a-t-il un moyen rapide de faire cela?
Utilisez next
avec enumerate
:
>>> myList = [0.0 , 0.0, 0.0, 2.0, 2.0]
>>> next((i for i, x in enumerate(myList) if x), None) # x!= 0 for strict match
3
Utiliser filtrer
>>> myList.index(filter(lambda x: x!=0, myList)[0])
3
Voici un one-liner pour le faire:
val = next((index for index,value in enumerate(myList) if value != 0), None)
Fondamentalement, il utilise next () pour trouver la première valeur, ou renvoie None
s'il n'en a pas. enumerate () est utilisé pour créer un itérateur qui itère sur un index, une valeur de tuples afin que nous connaissions l'index auquel nous nous trouvons.
Utiliser next
avec enumerate
est excellent lorsque le tableau est grand. Pour les tableaux plus petits, j'utiliserais argmax
à partir de numpy
pour ne pas avoir besoin d'une boucle:
import numpy as np
myList = [0.0, 0.0, 0.0, 2.0, 2.0]
myArray = np.array(myList)
np.argmax(myArray > 0)
3
Vous pouvez utiliser numpy.nonzero: http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.nonzero.html
myList = [0.0 , 0.0, 0.0, 2.0, 2.0]
I = np.nonzero(myList)
#the first index is necessary because the vector is within a Tuple
first_non_zero_index = I[0][0]
#3
Comment ça marche:
[i for i, x in enumerate(myList) if x][0]
Qu'en est-il d'utiliser énumérer? Vérifiez la documentation énumérer .
def first_non_zero(mylist):
for index, number in enumerate(mylist):
if number != 0: # or 'if number:'
return index
Que diriez-vous de suivre:
print (np.nonzero(np.array(myList))[0][0])
Ceci est plus pratique car, en plus de rechercher des valeurs non nulles, cela peut également aider à appliquer directement une fonction logique. Par exemple:
print (np.nonzero(np.array(myList)>1))
Utilisez simplement une compréhension de liste:
myDict = {x: index for index, x in enumerate(myList) if x}
Les indices des éléments non nuls sont myDict[element]
.