繁体   English   中英

保持生成器的运行总数的最pythonic方法是什么?

[英]What is the most pythonic way for keeping a running total of occurrences from a generator?

如果您有一个生成器或一组不是唯一的输入,并且我不能只是查询或存储在内存中,那么我怎样才能最好地保持运行记录?

如果内存不是问题,那么创建一个列表而不是使用 count 或使用 Counter 作为这个问题/答案

但是,如果没有足够的记忆力或对项目一无所知,我认为 dict 最有意义。 键是传入的值,值是计数。 有没有更好的方法?

一个例子可能是非等权重随机生成的数字。 就像一个无限面骰子,其中某些数字比其他数字多得多,但我们不知道这些数字是哪些。

collections.Counter可以处理一个迭代器,它可以让迭代器只返回(并保存在内存中)所需的下一个项目。

例子

from collections import Counter
from itertools import islice

import random


def producer():
    while True:
        yield int(random.normalvariate(300, 100))


data = Counter(islice(producer(), 400))

print(data)

400可以替换为更大的值,它只是将每个出现的值与出现次数一起存储一次所需的内存(如您描述的 dict )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM