将两个列表合并到多个列表的列表中

时间:2018-02-06 10:56:25

标签: python python-3.x list

给出两个列表lst1和lst2:

lst1 = ['a']
lst2 = [['b'],
        ['b', 'c'],
        ['b', 'c', 'd']]

我想将它们合并到一个包含所需输出的多个列表的列表中:

desiredList = [['a', ['b']],
              ['a', ['b', 'c']],
              ['a', ['b', 'c', 'd']]]

以下是我尝试使用lst1 + lst2list.append()

的尝试之一
lst3 = []
for elem in lst2:
    new1 = lst1
    new2 = elem
    theNew = new1 + new2
    lst3.append(theNew)

print(lst3)

#Output:
#[['a', 'b'],
#['a', 'b', 'c'],
#['a', 'b', 'c', 'd']]

对此进行扩展,我认为使用theNew = new1.append(new2)的另一种变体可以解决问题。但不是:

lst3 = []
for elem in lst2:
    new1 = lst1
    new2 = elem
    #print(new1 + new2)
    #theNew = new1 + new2
    theNew = new1.append(new2)

    lst3.append(theNew)
print(lst3)

# Output:
[None, None, None]

您将使用extend获得相同的结果。

我想这应该很容易,但我不知所措。

感谢您的任何建议!

4 个答案:

答案 0 :(得分:1)

您可以itertools.zip_longest使用fillvalue

获得所需的输出
>>> from itertools import zip_longest
>>> list(zip_longest(lst1, lst2, fillvalue=lst1[0]))
[('a', ['b']), ('a', ['b', 'c']), ('a', ['b', 'c', 'd'])]

或者如果您需要列表清单:

>>> [list(item) for item in zip_longest(lst1, lst2, fillvalue=lst1[0])]
[['a', ['b']], ['a', ['b', 'c']], ['a', ['b', 'c', 'd']]]

请注意,这假设lst1始终包含单个元素,如示例所示。

答案 1 :(得分:1)

或者你可以使用use append,但是你需要创建lst1的新副本:

lst3 = []
for elem in lst2:
    theNew = lst1[:]
    theNew.append(new2)
    lst3.append(theNew)
print(lst3)

答案 2 :(得分:1)

from itertools import product

list(product(lst1,lst2))
>>>[('a', ['b']), ('a', ['b', 'c']), ('a', ['b', 'c', 'd'])]

[lst1 + [new] for new in lst2]
>>>[['a', ['b']], ['a', ['b', 'c']], ['a', ['b', 'c', 'd']]]

答案 3 :(得分:0)

这可能会有所帮助

desiredlist = list(map(lambda y:[lst1,y],lst2))