这是一个非常小的问题,但很高兴知道。 我希望简化一些通常看起来像这样的报告代码:
i = 0
for e in clist:
log.info(u'Processing record {:,} of {:,}.'.format(i, len(clist)))
i += 1
# ... do something
有点丑吧?
是否有一个内置类可以生成下一个整数,以便我可以这样做:
i = IntegerGenerator(0)
for e in clist:
log.info(u'Processing record {:,} of {:,}.'.format(i, len(clist)))
# ... do something
还是我应该通过定义一个带有自定义 __str__
方法的生成器来自己编写它?
诚然,重点是摆脱 i += 1
。
最佳答案
您正在寻找 enumerate()
function :
for i, e in enumerate(clist):
log.info(u'Processing record {:,} of {:,}.'.format(i, len(clist)))
enumerate()
为传入序列中的项目生成带有 (index, item)
的元组。
如果您需要创建列表的独立计数,您可以使用itertools.count()
;每次将 count()
对象传递给 next()
function它将产生系列中的下一个值:
from itertools import count
i = count()
for e in clist:
if some_condition:
log.info(u'Processing record {:,} of {:,}.'.format(next(i), len(clist)))
现在 i
只会在每次 some_condition
为真时递增。
关于Python 访问计数生成器由 __str__() 触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27944211/