1

我需要我的计数器从 1 开始。现在我有

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

但是必须有更好的方法,在 Python v2.4

4

7 回答 7

5

生成器非常适合:

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
于 2011-11-23T00:32:29.777 回答
2

而不是counter += 1,也许counter + 1在你用过的地方使用counter

或者:

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

(Python 2.6 及更高版本有一些很棒的东西。如果可以,请尝试升级。)

于 2011-11-23T00:32:06.110 回答
2

您可以制作自己的版本enumerate()

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

或者,添加一个start参数,使其像更高版本的enumerate().

于 2011-11-23T00:35:22.753 回答
1

您可以使用zip()

>>> enums = zip(range(1, len(files) + 1), files)
>>> for index, val in enums:
    print index, val
于 2011-11-23T00:30:07.890 回答
1

我这样做是这样的:

#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

基本上,这是相同的,但却是一个独立的构造。

于 2011-11-23T00:40:47.837 回答
0
 for counter, item in enumerate(testlist):
    print(counter+1)
    print(item)
于 2011-11-23T00:35:19.073 回答
-1

在枚举方法中使用“start”参数来更改起始索引。

for counter, file in enumerate(files, start=1):
    print(counter, file)
于 2021-12-17T13:19:01.390 回答