如何找到项目在列表中出现的第n次索引?

Rim*_*oun 12 python indexing iterable

鉴于:

x = ['w', 'e', 's', 's', 's', 'z','z', 's']
Run Code Online (Sandbox Code Playgroud)

每次出现都s出现在以下指数:

1st:2
2nd:3
3rd:4
4th:7

如果我这样做,x.index('s')我将得到第一个索引.

我如何得到第四个指数s

fal*_*tru 12

使用列表理解enumerate:

>>> x = [ 'w', 'e', 's', 's', 's', 'z','z', 's']
>>> [i for i, n in enumerate(x) if n == 's'][0]
2
>>> [i for i, n in enumerate(x) if n == 's'][1]
3
>>> [i for i, n in enumerate(x) if n == 's'][2]
4
>>> [i for i, n in enumerate(x) if n == 's'][3]
7
Run Code Online (Sandbox Code Playgroud)


Jon*_*nts 5

如果您不想存储每个匹配项的索引,或者想要使用任意迭代,那么类似于:

from itertools import islice

def nth_index(iterable, value, n):
    matches = (idx for idx, val in enumerate(iterable) if val == value)
    return next(islice(matches, n-1, n), None)

x = [ 'w', 'e', 's', 's', 's', 'z','z', 's']
idx = nth_index(x, 's', 4)
# 7
Run Code Online (Sandbox Code Playgroud)

注意:有一个默认值None在那里next.您可能希望将其更改为其他内容,或将其删除并捕获StopIteration并引发另一个更合适的异常(ValueError例如,以便它与list.index行为更紧密相关).