在python中跟踪索引的正确方法是什么?

时间:2011-08-29 17:29:02

标签: python indexing lookup

现在我正在循环跟踪我的索引

index = 0
for entry in longList:
    if entry == 'foo':
        print index
    index += 1

有更好的方法吗?

6 个答案:

答案 0 :(得分:18)

for index, entry in enumerate(longList):
    if entry == 'foo':
        print index

答案 1 :(得分:10)

使用enumerate()内置功能。<​​/ p>

for index, entry in enumerate(longList):
    if entry == 'foo':
        print index

但是,在您的具体情况下,您只需执行index = longList.index("foo")

即可

编辑:如果你想在纯Python中尽可能快地找到多个匹配的索引,下面的代码应该可以解决这个问题:

indices = tuple(index for index, element in enumerate(longList) if element=='foo')

答案 2 :(得分:6)

我喜欢列表理解:)

[index for (index,entry) in enumerate(longList) if entry == 'foo']

答案 3 :(得分:5)

是的,最好的方法是这样做:

longList.index('foo')

答案 4 :(得分:3)

使用枚举会更好。

for ind,item in enumerate(longList):
    if item == 'foo':
        print ind

答案 5 :(得分:3)

如果您的列表非常长且静态,则应考虑使用查找表(实际上,使用条目作为键的索引列表字典)。第一次搜索后它几乎会收回成本,因为你目前总是遍历所有元素。

from collections import defaultdict

# Create and fill the table (only once or whenever the list changes)
lookupTable = defaultdict(list)
for index, entry in enumerate(longList):
    lookupTable[entry].append(index)

# Search the list (as many times as you want)
indexes = lookupTable.get('foo')
# and you get either 'None' or a list of indexes '[1,10,20]'