在Python中合并2d列表和1d列表的最佳方法?

在Python中合并2d列表和1d列表的最佳方法?,python,list,merge,Python,List,Merge,我需要在不丢失元素的情况下合并二维列表和一维列表 我使用了一个循环来获得结果,但我想知道是否有更好的方法 list1 = ["a","b","c","d"] list2 = [["1","2","3"],["4","5","6"],["7","8"]] max_column_count = len(list1) expected_result = [list1] for row in list2: if max_column_count > len(row): co

我需要在不丢失元素的情况下合并二维列表和一维列表

我使用了一个循环来获得结果,但我想知道是否有更好的方法

list1 = ["a","b","c","d"]
list2 = [["1","2","3"],["4","5","6"],["7","8"]]
max_column_count = len(list1)
expected_result = [list1]
for row in list2:
    if max_column_count > len(row):
        columns = max_column_count - len(row)
        row += [''] * columns
    expected_result.append(row)
print(expected_result)
输出

[['a', 'b', 'c', 'd'], ['1', '2', '3', ''], ['4', '5', '6', ''], ['7', '8', '', '']]

如果希望结果列表包含相同大小的列表,并填充空字符串:

list1 = ["a","b","c","d"]
list2 = [["1","2","3"],["4","5","6"],["7","8"]]
req_len = len(list1)
result = [list1] + [org + [''*(req_len - len(org))] for org in list2]
print result

如果您发布的输出是您的预期输出,那么使用from
itertools
将是一种方法:

>>> mx_len = len(max([list1,*list2]))
>>> 
>>> mx_len
4
>>> [x+['']*(mx_len-len(x)) for x in itertools.chain([list1], list2)]
[['a', 'b', 'c', 'd'], ['1', '2', '3', ''], ['4', '5', '6', ''], ['7', '8', '', '']]
>>>
>>> #another way by unpacking list2 in a list with list1
>>>
>>> [x+['']*(mx_len-len(x)) for x in itertools.chain([list1, *list2])]
[['a', 'b', 'c', 'd'], ['1', '2', '3', ''], ['4', '5', '6', ''], ['7', '8', '', '']]
另一种方法是双重压缩效果,如使用
'
转换两个列表,并用
'
填充缺少的值,然后再次压缩列表以恢复原始形状,方法如下:

>>> l1 = itertools.zip_longest(list1, *list2, fillvalue='')
>>> 
>>> l2 = list(zip(*l1))
>>>
>>> l2
[('a', 'b', 'c', 'd'), ('1', '2', '3', ''), ('4', '5', '6', ''), ('7', '8', '', '')]

这与您正在做的基本相同,但更简洁。如果您不知道map函数,现在是学习()的好时机。

这是您的预期输出吗?…如果不是。post请指定预期的输入和输出?上面的代码已经在执行该任务,因此输出就是输出和预期的输出。我的问题是,是否有更好的/最好的方法。一点解释会使您的贡献更有价值,也符合StackOverflow发布答案的指导原则(请参阅帮助中心)…我知道zip_会这样做,但我不知道如何处理它。多谢各位@西南切提卡亚。。当然可以。:@IronFist性能如何,哪种性能更快更有效?
>>> l1 = itertools.zip_longest(list1, *list2, fillvalue='')
>>> 
>>> l2 = list(zip(*l1))
>>>
>>> l2
[('a', 'b', 'c', 'd'), ('1', '2', '3', ''), ('4', '5', '6', ''), ('7', '8', '', '')]
>>> list1 = ["a","b","c","d"]
... list2 = [["1","2","3"],["4","5","6"],["7","8"]]
... list3 = [list1] + map(lambda x: x + ['']*(len(list1)-len(x)),list2)
>>> list3
6: [['a', 'b', 'c', 'd'],
 ['1', '2', '3', ''],
 ['4', '5', '6', ''],
 ['7', '8', '', '']]
>>>