Как перечислить через список с первым «индексом», указанным как 1?(Python 2.4) - PullRequest
1 голос
/ 23 ноября 2011

Мне нужен мой счетчик, чтобы начать с 1. Прямо сейчас у меня есть

for(counter, file) in enumerate(files):
    counter += 1
    //do stuff with file and counter

Но должен быть лучший способ, в Python v2.4

Ответы [ 6 ]

4 голосов
/ 23 ноября 2011

Генераторы идеально подходят для этого:

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
2 голосов
/ 23 ноября 2011

Вы можете сделать свою собственную версию enumerate():

def enumerate_1based(iterable):
    for index, item in enumerate(iterable):
        yield index+1, item

Альтернативно, добавьте аргумент start, чтобы он работал так же, как более поздние версии enumerate().

2 голосов
/ 23 ноября 2011

Вместо counter += 1, возможно, используйте counter + 1 там, где вы использовали counter.

В качестве альтернативы:

for counter, file in ((i + 1, f) for i, f in enumerate(files)):
    ...

(Python 2.6 и более поздние версии имеют некоторые замечательные вещи.Попробуйте обновить, если можете.)

1 голос
/ 23 ноября 2011

Я сделал это так:

#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

По сути, это та же самая, но автономная конструкция.

1 голос
/ 23 ноября 2011

Вы можете использовать zip():

>>> enums = zip(range(1, len(files) + 1), files)
>>> for index, val in enums:
    print index, val
0 голосов
/ 23 ноября 2011
 for counter, item in enumerate(testlist):
    print(counter+1)
    print(item)
...