在Python中查找列表中某些值的第一个和最后一个索引

问题描述 投票:51回答:6

是否存在任何内置方法作为列表的一部分,它将为我提供某些值的第一个和最后一个索引,例如:

verts.IndexOf(12.345)
verts.LastIndexOf(12.345)
python list search
6个回答
86
投票

序列有一个方法index(value),它返回第一次出现的索引 - 在你的情况下,这将是verts.index(value)

你可以在verts[::-1]上运行它来找出最后一个索引。在这里,这将是len(verts) - 1 - verts[::-1].index(value)


20
投票

使用i1 = yourlist.index(yourvalue)i2 = yourlist.rindex(yourvalue).


12
投票

如果您正在搜索myvalue中最后一次出现的mylist的索引:

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

8
投票

作为一个小帮手功能:

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

0
投票

这种方法可以比上面更优化

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
投票

Python列表具有index()方法,您可以使用该方法查找列表中项目第一次出现的位置。请注意,当在列表中找不到值时,list.index()会引发ValueError,因此您可能希望将其包装在try / except中:

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

要有效地找到列表中最后一个项目的位置(即不创建反转列表),您可以使用此函数:

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
© www.soinside.com 2019 - 2024. All rights reserved.