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

Python 如何返回给定值第n次出现时的索引号?,python,indexing,Python,Indexing,尽可能保持问题的一般性-我有一个值列表,需要返回指定值第n次出现的索引 list = [0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0] occurrence = 5 value = 1 所以我在寻找第五次出现值1的索引。在上面的示例中,返回值应该是11 “事件”和“值”是需要用户设置的变量 编辑 感谢大家的帮助,我一直在尝试各种选择,终于想出了这个 valList = [0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0] occurrence = 5 value

尽可能保持问题的一般性-我有一个值列表,需要返回指定值第n次出现的索引

list = [0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0]
occurrence = 5
value = 1
所以我在寻找第五次出现值1的索引。在上面的示例中,返回值应该是11

“事件”和“值”是需要用户设置的变量

编辑 感谢大家的帮助,我一直在尝试各种选择,终于想出了这个

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
valList=[0,0,1,1,0,1,0,0,0,1,0,1,1,0,1,0]
发生率=5
值=1
计数=0
行索引=-1
对于valList中的val:
如果计数<发生次数:
行索引+=1
如果val==valCR:
计数+=1
或者,
itertools
方式:

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

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

以下是一个有效的版本:

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
这类似于内置的
索引
,当找不到该值或
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)
--


以下是一个有效的版本:

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
这类似于内置的
索引
,当找不到该值或
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)
--


它应该是
occurrence-1
,并且要小心索引器。@AshwiniChaudhary:谢谢你的错误报告。很好(很明显,咖啡还没有开始)它应该是
occurrence-1
,并且要小心索引器。@AshwiniChaudhary:谢谢你的错误报告。很好的一点(很明显,咖啡还没有开始)我已经将另一个repy标记为“答案”,但是谢谢你,因为我喜欢while/for循环,因为我觉得它们更容易理解:)我已经将另一个repy标记为“答案”,但是谢谢你,因为我喜欢while/for循环,因为我觉得它们更容易理解:)