合并两个列表生成列表的列表
我想把这两个列表合并在一起:
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
>>> 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']]
>>>