Python 计数器在计数时会吃掉发电机吗?
我一直在看 我使用以下(简化)代码: 现在我的问题是,在我的实现中,Python 计数器在计数时会吃掉发电机吗?,python,python-3.x,generator,Python,Python 3.x,Generator,我一直在看 我使用以下(简化)代码: 现在我的问题是,在我的实现中,计数器将生成器作为输入。首先将生成器转换为列表将占用太多的内存空间 因此,我想知道collections.Counter是否首先将数据转换为列表,然后“计数”,或者它在计数时“吃掉”生成器 如果它首先将数据转换为列表。在不将其转换为列表的情况下,如何最好地实现它。不,您传入的iterable(无论是生成器还是其他iterable对象)不会转换为列表 不需要转换iterable;计数是在迭代时完成的。实施基本上与以下内容相同: c
计数器
将生成器作为输入。首先将生成器转换为列表将占用太多的内存空间
因此,我想知道collections.Counter
是否首先将数据转换为列表,然后“计数”,或者它在计数时“吃掉”生成器
如果它首先将数据转换为列表。在不将其转换为列表的情况下,如何最好地实现它。不,您传入的iterable(无论是生成器还是其他iterable对象)不会转换为列表 不需要转换iterable;计数是在迭代时完成的。实施基本上与以下内容相同:
counts = {}
for element in generator():
if element in counts:
counts[element] += 1
else:
counts[element] = 1
但是
Counter()
对象执行此操作的速度要快得多(计数代码是用C实现的)。否,传入的iterable(无论是生成器还是其他iterable对象)不会转换为列表
不需要转换iterable;计数是在迭代时完成的。实施基本上与以下内容相同:
counts = {}
for element in generator():
if element in counts:
counts[element] += 1
else:
counts[element] = 1
但是
Counter()
对象执行此操作的速度要快得多(计数代码是用C实现的)。据我所知,Counter
吃掉生成器并同时计数。没有itertools.Counter
只有collections.Counter
你说得对。据我所知,我改变了它,计数器
吃掉发电机,同时计数。没有itertools。计数器
只有集合。计数器
你说得对。我改了