列表操作后,Groupby对象消失

时间:2019-06-28 03:22:54

标签: python run-length-encoding

我正在尝试行程编码问题,并且在运行groupby&list操作之后,我的groupby对象不知何故消失了。

import itertools
s = 'AAAABBBCCDAA'
for c, group in itertools.groupby(s):
    print(list(group))
    print(list(group))

我的输出是

['A', 'A', 'A', 'A']
[]
['B', 'B', 'B']
[]
['C', 'C']
[]
['D']
[]
['A', 'A']
[]

所以对于每个循环,这两个打印命令会产生不同的结果。

有人可以帮我解释我做错了什么吗?

2 个答案:

答案 0 :(得分:3)

因为那里有发电机,在使用完之后它们就消失了:

>>> a = iter([1, 2, 3])
>>> list(a)
[1, 2, 3]
>>> list(a)
[]

要保留它们:

import itertools
s = 'AAAABBBCCDAA'
for c, group in itertools.groupby(s):
    l = list(group)
    print(l)
    print(l)

输出:

['A', 'A', 'A', 'A']
['A', 'A', 'A', 'A']
['B', 'B', 'B']
['B', 'B', 'B']
['C', 'C']
['C', 'C']
['D']
['D']
['A', 'A']
['A', 'A']

答案 1 :(得分:1)

groupby函数返回一个迭代器,该迭代器在您调用list(group)时消耗。

“返回的组本身就是一个与groupby()共享底层可迭代对象的迭代器。由于源是共享的,因此当对groupby()对象进行高级处理时,先前的组将不再可见。” docs