如果循环遍历一个列表/元组/序列,你可以使用
[更新以便更清晰:我在考虑单次使用有限迭代器,在这种情况下我想要同时对项目进行计算和计数。]
我目前使用显式计数器变量,如下面的例子所示:
[参考更新:@mata指出,如果最初的代码中迭代器为空,则第二个示例将失败。插入
它不使用
是否存在一种被接受的Pythonic方式来实现这一点(最好适用于Python 3和Python 2代码)?
len(...)
来推断循环执行的次数。但是当循环遍历迭代器时,你就不能这样做了。[更新以便更清晰:我在考虑单次使用有限迭代器,在这种情况下我想要同时对项目进行计算和计数。]
我目前使用显式计数器变量,如下面的例子所示:
def some_function(some_argument):
pass
some_iterator = iter("Hello world")
count = 0
for value in some_iterator:
some_function(value)
count += 1
print("Looped %i times" % count)
考虑到 "Hello world"
中有11个字符,期望输出应该是:
Looped 11 times
我也考虑过使用 enumerate(...)
这种更简短的方式,但我认为这并不是很清晰:
def some_function(some_argument):
pass
some_iterator = iter("Hello world")
count = 0 # Added for special case, see note below
for count, value in enumerate(some_iterator, start=1):
some_function(value)
print("Looped %i times" % count)
[参考更新:@mata指出,如果最初的代码中迭代器为空,则第二个示例将失败。插入
count = 0
解决了这个问题,或者我们可以使用for ... else ...
结构来处理这种情况。]它不使用
enumerate(...)
中的索引,而是将变量设置为循环计数几乎是一个副作用。对我来说,这非常不清楚,因此我更喜欢具有显式增量的第一个版本。是否存在一种被接受的Pythonic方式来实现这一点(最好适用于Python 3和Python 2代码)?
count
未定义,并且会出现NameError,所以你必须使用for ... else
或在循环之前初始化计数器。 - mata