Добавление списка (повторяемого) к пустому списку возвращает пустой список - PullRequest
0 голосов
/ 15 октября 2019

Может кто-нибудь объяснить, почему это не работает? Я хочу создать список (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']
[[], [], []]

Любая помощь приветствуется! / David

1 Ответ

2 голосов
/ 15 октября 2019

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)
...