合并两个列表生成列表的列表

6 投票
2 回答
9131 浏览
提问于 2025-04-18 04:29

我想把这两个列表合并在一起:

a = [1,2,3,4,"a"]
b = [1,2,3,4,"b"]

这样变成:

[[1,1], [2,2], [3,3], [4,4], ["a","b"]]

有什么好的方法可以做到这一点吗?

另外,如果可以的话,我还想继续添加更多的列表,像这样:

c = [5,6,7,8,"c"]

这样得到:

[[1,1,5], [2,2,6], [3,3,7], [4,4,8], [5,5,9], ["a","b","c"]

你可以假设这些列表的长度是一样的。

相关问题:

2 个回答

1

接受的解决方案的变体

因为它明确地列出了子列表中的项目,所以我觉得这样写更容易理解:

>>> a = [1,2,3,4,"a"]
>>> b = [1,2,3,4,"b"]
>>> c = [5,6,7,8,"c"]
>>> [[ai, bi, ci] for ai, bi, ci in zip(a, b, c)]
[[1, 1, 5], [2, 2, 6], [3, 3, 7], [4, 4, 8], ['a', 'b', 'c']]

使用 map 的最简短变体

>>> map(list, zip(a, b, c))
[[1, 1, 5], [2, 2, 6], [3, 3, 7], [4, 4, 8], ['a', 'b', 'c']]
10

你可以使用zip这个函数,配合列表推导式来实现你的需求。

>>> a = [1, 2, 3, 4, "a"]
>>> b = [1, 2, 3, 4, "b"]
>>> new_lst = [list(x) for x in zip(a, b)]
>>> new_lst
[[1, 1], [2, 2], [3, 3], [4, 4], ['a', 'b']]
>>>

补充:

关于你更新的问题,如果你之后想要再添加一个列表,可以使用这个方法:

>>> c = [5, 6, 7, 8, "c"]
>>> [x + [y] for x,y in zip(new_lst, c)]
[[1, 1, 5], [2, 2, 6], [3, 3, 7], [4, 4, 8], ['a', 'b', 'c']]
>>>

当然,如果你一开始就有三个列表,那么你只需要给zip函数再传一个参数就可以了:

>>> a = [1, 2, 3, 4, "a"]
>>> b = [1, 2, 3, 4, "b"]
>>> c = [5, 6, 7, 8, "c"]
>>> new_lst = [list(x) for x in zip(a, b, c)]
>>> new_lst
[[1, 1, 5], [2, 2, 6], [3, 3, 7], [4, 4, 8], ['a', 'b', 'c']]
>>>

撰写回答