Как правильно отслеживать индексы в Python? - PullRequest
11 голосов
/ 29 августа 2011

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

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

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

Ответы [ 6 ]

18 голосов
/ 29 августа 2011
for index, entry in enumerate(longList):
    if entry == 'foo':
        print index
10 голосов
/ 29 августа 2011

Используйте встроенную функцию 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')
6 голосов
/ 29 августа 2011

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

[index for (index,entry) in enumerate(longList) if entry == 'foo']
5 голосов
/ 29 августа 2011

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

longList.index('foo')
3 голосов
/ 30 августа 2011

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

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]'
3 голосов
/ 29 августа 2011

Лучше было бы использовать enumerate.

for ind,item in enumerate(longList):
    if item == 'foo':
        print ind
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...