python groupby和列表交互

时间:2019-08-11 02:12:13

标签: python list group-by

如果我们运行以下代码,

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结果。

1 个答案:

答案 0 :(得分:3)

groupby库中的许多对象一样,itertools的结果是可迭代的,只能迭代一次。这是为了允许延迟评估。因此,当您调用类似list(r)之类的内容时,r现在是一个空的可迭代对象。

当迭代空的可迭代对象时,结果列表当然是空的。在第二种情况下,在迭代之前不要消耗迭代。因此,iterable不为空。