Как перечислить через список с первым "индексом", указанным как 1? (Python 2.4)
Мне нужен мой счетчик, чтобы начать с 1. Прямо сейчас у меня есть
for(counter, file) in enumerate(files):
counter += 1
//do stuff with file and counter
Но должен быть лучший способ, в Python v2.4
7 ответов
Решение
Вместо counter += 1
, может быть, использовать counter + 1
где вы использовали counter
,
В качестве альтернативы:
for counter, file in ((i + 1, f) for i, f in enumerate(files)):
...
(В Python 2.6 и более поздних версиях есть кое-что интересное. Попробуйте обновить, если можете.)
Генераторы идеально подходят для этого:
def altenumerate( it ):
return ((idx+1, value) for idx, value in enumerate(it))
Упрощенный для более старых версий Python:
def altenumerateOld( it ):
idx = 1
for value in it:
yield (idx, value)
idx += 1
Вы можете сделать свою собственную версию enumerate()
:
def enumerate_1based(iterable):
for index, item in enumerate(iterable):
yield index+1, item
Альтернативно, добавьте start
аргумент, чтобы заставить его работать так же, как в более поздних версиях enumerate()
,
Я сделал это так:
#Emulate enumerate() with start parameter (introduced in Python 2.6)
for i,v in (i+start,v for i,v in enumerate(seq)):
//do stuff
По сути, это та же самая, но автономная конструкция.
Ты можешь использовать zip()
:
>>> enums = zip(range(1, len(files) + 1), files)
>>> for index, val in enums:
print index, val
for counter, item in enumerate(testlist):
print(counter+1)
print(item)
Используйте параметр «start» в методе перечисления, чтобы изменить начальный индекс.
for counter, file in enumerate(files, start=1):
print(counter, file)