将列表(可迭代)附加到空列表将返回空列表

时间:2019-10-15 13:27:13

标签: python-3.x list grouping itertools

有人可以解释为什么这不起作用吗?我想创建一个包含多个列表的列表(list0),在本示例中,该列表按第一个单词(Test0,Test1,Test2)分组。

from itertools import groupby
list0 = []
list1 = ['Test0 A.csv', 'Test1 A.csv', 'Test1 B.csv', 'Test2 A.csv', 'Test2 B.csv', 'Test2 C.csv']
for k,g in groupby(list1, key=lambda x: x.split(' ')[0]):
    print(list(g))
    list0.append(list(g))
    print(list0)

输出变为:

['Test0 A.csv']
[[]]
['Test1 A.csv', 'Test1 B.csv']
[[], []]
['Test2 A.csv', 'Test2 B.csv', 'Test2 C.csv']
[[], [], []]

感谢您的帮助! /大卫

1 个答案:

答案 0 :(得分:2)

g是一个迭代器,(不是)一个迭代器。因此,对其进行迭代不一定是可重现的。在这种情况下,在迭代器上进行迭代会耗尽它。通过复制打印请求,您可以看到此效果:

for k,g in groupby(list1, key=lambda x: x.split(' ')[0]):
    print(list(g))
    print(list(g))
    list0.append(list(g))
    print(list0)

输出:

['Test0 A.csv']
[]
[[]]
['Test1 A.csv', 'Test1 B.csv']
[]
[[], []]
['Test2 A.csv', 'Test2 B.csv', 'Test2 C.csv']
[]
[[], [], []]

要解决此问题,请将您从其中创建的列表保存到可以打印并附加的名称中:

for k,g in groupby(list1, key=lambda x: x.split(' ')[0]):
    g_list = list(g)
    print(g_list)
    list0.append(g_list)
    print(list0)