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

Sin*_*aya 4 python merge list

我需要合并二维列表和单维列表而不会丢失元素.

我使用循环来实现结果,但我想知道是否有更好的方法.

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)
Run Code Online (Sandbox Code Playgroud)

产量

[['a', 'b', 'c', 'd'], ['1', '2', '3', ''], ['4', '5', '6', ''], ['7', '8', '', '']]
Run Code Online (Sandbox Code Playgroud)

Iro*_*ist 5

如果您作为输出发布的是您的预期输出,那么使用chainfrom 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', '', '']]
Run Code Online (Sandbox Code Playgroud)

另一种方法是双重压缩效果,比如使用zip_longest并填充缺失值,''然后再次压缩列表以恢复原始形状,这样:

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