Python 访问计数生成器由 __str__() 触发?

标签 python

这是一个非常小的问题,但很高兴知道。 我希望简化一些通常看起来像这样的报告代码:

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/

相关文章:

python - cv2 triangulatePoints 总是返回相同的 Z 值

python - 无法在conda环境(MAC)中点安装pyAudio

python - 旧式类、新式类和元类

python - 缺少 1 个必需的位置参数 : 'queryset'

python - 有两种方式从 Pandas DataFrame 中提取单列,有什么区别?

python - 如何在python中使用多维字典

python - 关于在numpy中设置网格并填充相应的多维数组

python - 如何在Python中删除字符串开头或结尾的停用词?

python - 如何在脚本中导入所有 django 模型及更多模型?

python - 在 numpy 中多次引用 bool 切片