如果我们运行以下代码,
from itertools import groupby
s = '1223'
r = groupby(s)
x = list(r)
a = [list(g) for k, g in r]
print(a)
b =[list(g) for k, g in groupby(s)]
print(b)
然后令人惊讶的是,两条输出线是不同的:
[]
[['1'], ['2', '2'], ['3']]
但是,如果我们删除“ x = list(r)”行,则这两行是预期的一样。我不明白为什么list()函数会更改groupby结果。
答案 0 :(得分:3)
与groupby
库中的许多对象一样,itertools
的结果是可迭代的,只能迭代一次。这是为了允许延迟评估。因此,当您调用类似list(r)
之类的内容时,r
现在是一个空的可迭代对象。
当迭代空的可迭代对象时,结果列表当然是空的。在第二种情况下,在迭代之前不要消耗迭代。因此,iterable不为空。