web-dev-qa-db-fra.com

Recherche du premier et du dernier index d'une valeur dans une liste dans Python

Y a-t-il des méthodes intégrées qui font partie des listes qui me donneraient le premier et le dernier index d'une certaine valeur, comme:

verts.IndexOf(12.345)
verts.LastIndexOf(12.345)
55
Joan Venge

Les séquences ont une méthode index(value) qui retourne l'indice de première occurrence - dans votre cas, ce serait verts.index(value).

Vous pouvez l'exécuter sur verts[::-1] Pour connaître le dernier index. Ici, ce serait len(verts) - 1 - verts[::-1].index(value)

89
SilentGhost

Utilisez i1 = yourlist.index(yourvalue) et i2 = yourlist.rindex(yourvalue).

21
tommy.carstensen

Si vous recherchez l'index de la dernière occurrence de myvalue dans mylist:

len(mylist) - mylist[::-1].index(myvalue) - 1
12
user2669486

En tant que petite fonction d'aide:

def rindex(mylist, myvalue):
    return len(mylist) - mylist[::-1].index(myvalue) - 1
8
Caridorc

Les listes Python ont la méthode index() , que vous pouvez utiliser pour trouver la position de la première occurrence d'un élément dans une liste. Notez que list.index() lève ValueError lorsque la valeur n'est pas trouvée dans la liste, vous pouvez donc l'envelopper dans try/except:

try:
    idx = lst.index(value)
except ValueError:
    idx = None

Pour trouver la position de la dernière occurrence d'un élément dans une liste (c'est-à-dire sans créer la liste inversée), vous pouvez utiliser cette fonction:

def rindex(lst, value):
    for i, v in enumerate(reversed(lst)):
        if v == value:
            return len(lst) - i - 1  # return the index in the original list
    return None    

print(rindex([1, 2, 3], 3))     # 2
print(rindex([3, 2, 1, 3], 3))  # 3
print(rindex([3, 2, 1, 3], 4))  # None
2
Eugene Yarmash

Cette méthode peut être plus optimisée que ci-dessus

def rindex(iterable, value):
    try:
        return len(iterable) - next(i for i, val in enumerate(reversed(iterable)) if val == value) - 1
    except StopIteration:
        raise ValueError
0
111