我正在尝试行程编码问题,并且在运行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']
[]
所以对于每个循环,这两个打印命令会产生不同的结果。
有人可以帮我解释我做错了什么吗?
答案 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。