【发布时间】:2011-11-23 00:26:53
【问题描述】:
我需要我的计数器从 1 开始。现在我有
for(counter, file) in enumerate(files):
counter += 1
//do stuff with file and counter
但必须有更好的方法,在 Python v2.4 中
【问题讨论】:
标签: python python-2.4 enumerator
我需要我的计数器从 1 开始。现在我有
for(counter, file) in enumerate(files):
counter += 1
//do stuff with file and counter
但必须有更好的方法,在 Python v2.4 中
【问题讨论】:
标签: python python-2.4 enumerator
发电机非常适合:
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
【讨论】:
counter+1,那么将这个想法抽象成一个生成器表达式或函数。如果是一次性的,什么都可以。
在您使用过counter 的地方,可以使用counter + 1,而不是counter += 1。
或者:
for counter, file in ((i + 1, f) for i, f in enumerate(files)):
...
(Python 2.6 及更高版本有一些很棒的东西。如果可以,请尝试升级。)
【讨论】:
您可以制作自己的enumerate():
def enumerate_1based(iterable):
for index, item in enumerate(iterable):
yield index+1, item
或者,添加一个start 参数,使其与enumerate() 的更高版本一样工作。
【讨论】:
你可以使用zip():
>>> enums = zip(range(1, len(files) + 1), files)
>>> for index, val in enums:
print index, val
【讨论】:
izip 将返回一个生成器。
我是这样做的:
#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
基本上,这是相同的,但却是一个独立的构造。
【讨论】:
for counter, item in enumerate(testlist):
print(counter+1)
print(item)
【讨论】:
在枚举方法中使用“start”参数来改变起始索引。
for counter, file in enumerate(files, start=1):
print(counter, file)
【讨论】: