在以下示例的展开列表中是否有pythonic方式?

时间:2017-03-09 22:14:01

标签: python

例如:

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是列表类型的元素,但我不知道如何在几次尝试失败后以更加pythonic的方式解决这个问题。我绝对可以逐行迭代并使用for循环和append()

2 个答案:

答案 0 :(得分:3)

你需要一个嵌套的理解来解开内部列表项:

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

答案 1 :(得分:1)

没有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)]