понимание списка с упакованными кортежами - PullRequest
3 голосов
/ 11 мая 2019

У меня есть два списка.

list_1 = [[1, 0, 0, 1], [0, 2, 0, 0]]
list_2 = [(1,'A'), (2,'B'), (3,'C'), (4,'D')]

Я хочу создать новый список, list_3.

[[(1, 'A'), (4, 'D')], [(2, 'B'), (2, 'B')]]

Я хотел использовать понимание списка.

list_3 = [[list_2[index]*val for index, val in enumerate(elem) if val > 0] for elem in list_1]

Но сгенерировано:

[[(1, 'A'), (4, 'D')], [(2, 'B', 2, 'B')]]

Вы можете видеть, что во втором члене кортеж распакован.Как сохранить кортеж?

1 Ответ

3 голосов
/ 11 мая 2019
list_1 = [[1, 0, 0, 1], [0, 2, 0, 0]]
list_2 = [(1,'A'), (2,'B'), (3,'C'), (4,'D')]
list_3 = [
    [
        item
        for index, val in enumerate(elem) if val > 0
        for item in [list_2[index]] * val
    ]
    for elem in list_1
]
print(list_3)
# [[(1, 'A'), (4, 'D')], [(2, 'B'), (2, 'B')]]
...