Существует ли в следующем примере пример pythonic в списке распаковки?

130
12

Например:

list1=['a','b']
list2 = [['apple', 'pineapple'], ['orange', 'grapes']]

Я хочу получить что-то вроде:

[ ['a', 'apple'], ['a', 'pineapple'], ['b', 'orange'],, ['b', 'grapes'] ]

Я попробовал [[i1, i2] for i1, i2 in itertools.izip(list1, list2)] но это даст мне следующее:

[ ['a',['apple', 'pineapple'], ['b', ['orange', 'grapes']] ]

Я знаю, почему это неправильно, поскольку i2 является элементом типа списка, но я не знаю, как решить это более питоническим путем после нескольких неудачных попыток. Я могу определенно перебирать строки за строкой и использовать для loop и append().

спросил(а) 2021-01-19T12:20:47+03:00 2 месяца, 4 недели назад
1
Решение
87

Вам нужно вложенное понимание, чтобы развернуть внутренние элементы списка:

>>> [[i, x] for i, j in zip(list1, list2) for x in j]
[['a', 'apple'], ['a', 'pineapple'], ['b', 'orange'], ['b', 'grapes']]

ответил(а) 2021-01-19T12:20:47+03:00 2 месяца, 4 недели назад
61

без itertools

final = []
for i,k in enumerate(list1):
for j in list2[i]:
final.append([k,j])
print final

[['a', 'apple'], ['a', 'pineapple'], ['b', 'orange'], ['b', 'grapes']]


один лайнер:

[[k,j] for j in list2[i] for i,k in enumerate(list1)]

ответил(а) 2021-01-19T12:20:47+03:00 2 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема