有人可以解释为什么这不起作用吗?我想创建一个包含多个列表的列表(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']
[[], [], []]
感谢您的帮助! /大卫
答案 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)