Каков правильный способ отслеживания индексов в python?

Прямо сейчас я отслеживаю свой индекс в цикле, как этот

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

Есть ли лучший способ сделать это?

Ответ 1

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

Ответ 2

Используйте встроенную функцию enumerate().

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')

Ответ 3

Мне нравится понимание списка:)

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

Ответ 4

Да, лучший способ сделать это:

longList.index('foo')

Ответ 5

Использование перечисления было бы лучшей идеей.

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

Ответ 6

Если ваш список действительно длинный и статичный, вам следует использовать таблицу поиска (фактически, словарь индексных списков с записью в качестве ключа). Он будет почти платить за себя после первого поиска, так как вы в настоящее время всегда перебираете все элементы.

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]'