我有一个可迭代的条目,我想收集一些简单的统计数据,比如可以被2整除的所有数字的数量以及可被3整除的所有数字的数量.
我的第一个选择,虽然只迭代列表一次并避免列表扩展(并保持拆分循环重构),看起来相当臃肿:
(alt 1)
r = xrange(1, 10)
twos = 0
threes = 0
for v in r:
if v % 2 == 0:
twos+=1
if v % 3 == 0:
threes+=1
print twos
print threes
Run Code Online (Sandbox Code Playgroud)
这看起来相当不错,但是有将表达式扩展到列表的缺点:
(alt 2)
r = xrange(1, 10)
print len([1 for v in r if v % 2 == 0])
print len([1 for v in r if v % 3 == 0])
Run Code Online (Sandbox Code Playgroud)
我真正喜欢的是像这样的函数:
(alt 3)
def count(iterable):
n = 0
for i in …Run Code Online (Sandbox Code Playgroud) 我正在努力改进我的文档.我想说这个函数接受的是collections.Iterable,但是代码会迭代迭代多次."list"太具体了,"iterable"不起作用,因为一些iterables只能迭代一次.
有东西的名字吗?"重新迭代"?多迭代?