如何返回给定值第n次出现的索引号?

2024-06-28 15:05:29 发布

您现在位置:Python中文网/ 问答频道 /正文

尽可能保持问题的通用性-我有一个值列表,需要返回指定值第n次出现的索引。。。你知道吗

list = [0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0]
occurrence = 5
value = 1

所以我在寻找第5次出现值1的索引。在上面的例子中,返回值应该是11。你知道吗

“occurrence”和“value”是需要用户设置的变量

编辑

谢谢你们的帮助,我一直在考虑各种各样的选择

valList = [0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0]
occurrence = 5
value = 1

count = 0
rowIndex = -1

for val in valList:
    if count < occurrence:
        rowIndex += 1
        if val == valCR:
            count += 1

Tags: 用户编辑列表forifvaluecountval
2条回答

下面是一个有效的版本:

def nth_index(sequence, n, value):
    i = -1
    for _ in xrange(n):
        i = sequence.index(value, i + 1)
    return i

 lst = [0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0]
 print nth_index(lst, 5, 1) # 11

其行为类似于内置的index,当找不到值或n太大时,会引发ValueError:

 print nth_index(lst, 55, 1) # ValueError: 1 is not in list

FTR,计时:

import timeit, itertools

lst = range(1000) * 5
value = 0
occurrence = 5

print timeit.timeit(lambda: [i for i,elem in enumerate(lst) if elem==value][occurrence-1], number=1000)
print timeit.timeit(lambda: next(itertools.islice((i for i,elem in enumerate(lst) if elem==value), occurrence-1, occurrence)), number=1000)
print timeit.timeit(lambda: nth_index(lst, occurrence, value), number=1000)

你知道吗

0.52188706398
0.416564941406
0.117225885391
>>> mylist = [0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0]
>>> occurrence = 5
>>> value = 1
>>> [i for i,elem in enumerate(mylist) if elem==value][occurrence-1]
11

或者,用itertools的方式:

>>> next(itertools.islice((i for i,elem in enumerate(mylist) if elem==value), occurrence-1, occurrence))
11

相关问题 更多 >