【问题标题】:Python - Merge two lists with a simultaneous concatenationPython - 合并两个同时连接的列表
【发布时间】:2014-01-04 04:14:39
【问题描述】:
ListA = [1,2,3]
ListB = [10,20,30]

我想将列表的内容添加在一起(1+10,2+20,3+30) 创建以下列表:

ListC = [11,22,33]

有没有专门用这种方式合并列表的函数?

【问题讨论】:

    标签: python python-3.x merge concatenation


    【解决方案1】:

    这行得通:

    >>> ListA = [1,2,3]
    >>> ListB = [10,20,30]
    >>> list(map(sum, zip(ListA, ListB)))
    [11, 22, 33]
    >>>
    

    上面使用的所有内置函数都解释了here


    另一种解决方案是使用list comprehension

    根据您的口味,您可以这样做:

    >>> [sum(x) for x in zip(ListA, ListB)]
    [11, 22, 33]
    >>>
    

    或者这个:

    >>> [x+y for x,y in zip(ListA, ListB)]
    [11, 22, 33]
    >>>
    

    【讨论】:

    • 我必须写[k for k in map (...)] 才能生成列表,否则我会得到<map object at 0x02380730>,这可能与Python 3 不同。
    • @LasseV.Karlsen - 是的。我很抱歉。我没有看到 Python 3.x 标签。我更新了我的帖子。
    • @LasseV.Karlsen 是的,在 Python 2 中 map 返回一个列表,而在 Python 3 中它返回一个生成器对象。
    • 也许让 list-comp 与map 方法更加一致...[sum(items) for items in zip(listA, listB)]
    • @JonClements - 已更新。
    【解决方案2】:

    @iCodez 给出了很好的回应,但在适用于更复杂情况并且需要在列表之间进行大量操作(和连接)的情况下,numpy 是一个非常强大的学习工具!这就是您使用 numpy 解决问题的方法:

    #import it
    import numpy as np
    #state your lists as numpy arrays
    array1 = np.array(ListA)
    array2 = np.array(ListB)
    

    然后将您的两个列表设置为 numpy 数组。现在你要做的就是添加它们!

    >>> concatenated = array1 + array2
    >>> print concatenated
    [11, 22, 33]
    

    现在这会返回一个 numpy 数组的实例,所以如果你想要它作为一个列表,你可以直接使用 concatenated.tolist()。如您所见,当您跨列表映射数学运算时,这非常有用。你可以用 numpy 做很多事情,我建议你研究一下。

    注意:我知道使用 numpy 来解决这样一个快速简单的问题比必要的更详尽,但以防万一这是一个快速的“我如何解决跨多个列表的操作”,numpy 会让你的生活变得更加轻松!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 2017-11-30
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      相关资源
      最近更新 更多