Python:运行迭代器值的计数而不构建列表

Python: running tally of iterator values without building a list

本问题已经有最佳答案,请猛点这里访问。

我想计算一个迭代器的唯一值,但不需要先构建一个列表。使用列表,我可以这样做,例如:

1
2
3
4
from collections import Counter
from itertools import combinations

my_counts = Counter([sum(x) for x in combinations([1,2,3,4,5])],2)

但上面列出了一个清单,然后应用了Counter。但是有没有一种方法可以保持一个连续的计数,这样整个列表就不需要存储在内存中了?


只需向Counter输入一个生成器表达式,而不是list表达式:

1
my_counts = Counter(sum(x) for x in combinations([1,2,3,4,5], 2))

或者更短(但是map只返回python3中的生成器):

1
my_counts = Counter(map(sum, combinations([1,2,3,4,5], 2)))

这不会首先在内存中构建列表。