it-swarm.com.de

Suchen des ersten und letzten Indexes eines Wertes in einer Liste in Python

Gibt es irgendwelche eingebauten Methoden, die Teil von Listen sind, die mir den ersten und letzten Index eines Wertes geben würden, wie:

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

Sequenzen haben eine Methode index(value), die den Index des ersten Auftretens zurückgibt - in Ihrem Fall wäre dies verts.index(value).

Sie können es mit verts[::-1] Ausführen, um den letzten Index herauszufinden. Hier wäre dies len(verts) - 1 - verts[::-1].index(value)

89
SilentGhost

Benutze i1 = yourlist.index(yourvalue) und i2 = yourlist.rindex(yourvalue).

21

Wenn Sie nach dem Index des letzten Vorkommens von myvalue in mylist suchen:

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

Als kleine Hilfsfunktion:

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

Python-Listen haben die index() -Methode, mit der Sie die Position des ersten Vorkommens ermitteln können eines Elements in einer Liste. Beachten Sie, dass list.index()ValueError auslöst, wenn der Wert nicht in der Liste gefunden wird. Sie können ihn also in try/except einschließen:

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

Um die Position des letzten Vorkommens eines Elements in einer Liste effizient zu ermitteln (d. H. Ohne die umgekehrte Liste zu erstellen), können Sie diese Funktion verwenden:

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

Diese Methode kann mehr als oben optimiert werden

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