给出两个列表lst1和lst2:
lst1 = ['a']
lst2 = [['b'],
['b', 'c'],
['b', 'c', 'd']]
我想将它们合并到一个包含所需输出的多个列表的列表中:
desiredList = [['a', ['b']],
['a', ['b', 'c']],
['a', ['b', 'c', 'd']]]
以下是我尝试使用lst1 + lst2
和list.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
获得相同的结果。
我想这应该很容易,但我不知所措。
感谢您的任何建议!
答案 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))