Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计数器在计数时会吃掉发电机吗?_Python_Python 3.x_Generator - Fatal编程技术网

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。计数器
只有
集合。计数器
你说得对。我改了