我总是被告知,当您需要计算数字并同时迭代时,可以使用enumerate
内置。
例如,这是Python中常见的习惯用法(函数gen
返回生成器):
for index, item in enumerate(gen()):
# Do something with item
# get the numbers consumed from generator
print("% number of items processed" % (index+1,))
但是如果发电机什么都没有?例如enumerate(range(0))
,index
变量将是未定义的。
我们可以在for循环之前定义index
变量,但还有更多我不知道的pythonic解决方案吗?
答案 0 :(得分:5)
enumerate(gen(), start=1)
会使index
从1开始计算,从而无需index+1
。否则,我认为你拥有的已经是Pythonic。
index = 0
for index, item in enumerate(gen(), start=1):
# Do something with item
print("%d number of items processed" % (index,))
答案 1 :(得分:1)
如果您打算再次使用index
,那么只需将其初始化为for
循环,就像您所说的那样。关于此,没有任何“非Pythonic”。
如果您不确定是否定义index
,您可以随时使用try / except:
>>> from __future__ import print_function # for Python 2 compatibility
>>> import sys
>>>
>>> for i, j in enumerate(range(0)):
... pass
...
>>> try:
... print(i)
... except NameError:
... print('i was not defined', file=sys.stderr)
...
i was not defined