python itertools groupby返回空

时间:2018-07-27 21:41:14

标签: python itertools

我非常困惑,为什么itertools.groupby的结果已转换为列表,仍然返回空?但是您可以看到正确的打印结果!

from itertools import groupby

sample = [['data', '8', '1', '14:05:00', '15:05:00', 'fall'], ['data', '8', '1', '14:45:00', '15:45:00', 'winter']]

arr= []

for i2,i in groupby(data, key=lambda x: x[5]):
    print(i2, list(i))
    arr.append(list(i))

print(arr)

为什么arr为空?

1 个答案:

答案 0 :(得分:3)

那是因为Python迭代器只能一次进行迭代。

例如:

def f():
    for i in range(5):
        yield i

i = f() # i is an iterator

list(i) # [1, 2, 3, 4, 5]
# i has been iterated once, now it's empty
list(i) # []

在您的情况下,i是一个迭代器,并且已经在print中进行了迭代,因此在打印之前删除print或将其分配给变量:

l = list(i)
print(i2, l)
arr.append(l)

应该给您预期的结果。