【问题标题】:merge two lists to make list of lists [duplicate]合并两个列表以制作列表列表[重复]
【发布时间】:2014-06-13 04:22:22
【问题描述】:

我想合并两个列表:

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"]

您可以假设列表的长度相同。

【问题讨论】:

  • 是的,我意识到这可能是一个重复的问题,但我没有通过搜索找到任何东西
  • 他要求的不是元组列表,而是列表列表
  • 为什么人们会疯狂地否决这样一个问题?
  • @StéphaneLaurent google.co.in/search?q=merge+two+list+into+list+of+lists+python 第一次命中,将元组转换为列表非常简单。
  • @StéphaneLaurent 您甚至可能会争辩说列表元素与引用的问题不同。

标签: python arrays list


【解决方案1】:

您可以使用ziplist comprehension

>>> 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']]
>>>

【讨论】:

  • 谢谢,我现在将删除该问题,因为它是重复的。
  • 它不完全是重复的,@Dave
  • 谢谢 - 并回答我编辑的更新。我现在明白了很多。
【解决方案2】:

接受的解决方案的变化

因为它明确声明子列表的项目,所以在我看来更具可读性:

>>> 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']]

【讨论】:

    猜你喜欢
    • 2017-09-04
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    相关资源
    最近更新 更多