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
>>> 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)
如果您不想存储每个匹配项的索引,或者想要使用任意迭代,那么类似于:
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行为更紧密相关).