web-dev-qa-db-ja.com

Pythonのリスト内の値の最初と最後のインデックスを見つける

次のように、値の最初と最後のインデックスを提供するリストの一部である組み込みメソッドはありますか?

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

シーケンスには、最初の発生のインデックスを返すメソッドindex(value)があります-あなたの場合、これはverts.index(value)になります。

_verts[::-1]_で実行して、最後のインデックスを見つけることができます。ここでは、これはlen(verts) - 1 - verts[::-1].index(value)になります

89
SilentGhost

i1 = yourlist.index(yourvalue)およびi2 = yourlist.rindex(yourvalue).を使用します

21

myvalueで最後に出現するmylistのインデックスを検索する場合:

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

小さなヘルパー関数として:

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

Pythonリストには index() メソッドがあり、これを使用してfirstオカレンスの位置を見つけることができますリスト内のアイテムの。リストに値が見つからない場合、list.index()ValueErrorを発生させるので、try/exceptでラップすることもできます。

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

リスト内のアイテムのlastオカレンスの位置を効率的に(つまり、反転リストを作成せずに)見つけるには、この関数を使用できます:

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

この方法は上記よりも最適化できます

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