Прямо сейчас я отслеживаю свой индекс в цикле, как этот
index = 0
for entry in longList:
if entry == 'foo':
print index
index += 1
Есть ли лучший способ сделать это?
Прямо сейчас я отслеживаю свой индекс в цикле, как этот
index = 0
for entry in longList:
if entry == 'foo':
print index
index += 1
Есть ли лучший способ сделать это?
for index, entry in enumerate(longList):
if entry == 'foo':
print index
Используйте встроенную функцию 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')
Мне нравится понимание списка:)
[index for (index,entry) in enumerate(longList) if entry == 'foo']
Да, лучший способ сделать это:
longList.index('foo')
Использование перечисления было бы лучшей идеей.
for ind,item in enumerate(longList):
if item == 'foo':
print ind
Если ваш список действительно длинный и статичный, вам следует использовать таблицу поиска (фактически, словарь индексных списков с записью в качестве ключа). Он будет почти платить за себя после первого поиска, так как вы в настоящее время всегда перебираете все элементы.
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]'