【问题标题】:Merge multiple 2d lists considering axis in order按顺序合并多个考虑轴的二维列表
【发布时间】:2014-05-30 01:15:32
【问题描述】:

我的目的是按顺序组合多个 2d 列表,例如:

a = [[1,2],[3,1]]
b= [[3,6],[2,9]]
c = [[5,1],[8,10]]
Expected: [[1,2,3,6,5,1],[3,1,2,9,8,10]]

根据本网站其他人的建议,我尝试使用如下代码所示的集合模块:

from collections import Counter
a = [[1,2],[3,1]]
b= [[3,6],[2,9]]
c = [[5,1],[8,10]]
d = [[k,v] for k,v in (Counter(dict(a)) + Counter(dict(b))+ Counter(dict(c))).items()]
print d

但是,结果是[[1, 2], [3, 1], [3, 6], [2, 9]],这不是我的预期。

你有解决这个问题的想法吗?也许如果有功能或模块可以考虑组合列表的轴。

【问题讨论】:

    标签: python merge axis


    【解决方案1】:

    您可以使用ziplist comprehension

    >>> a = [[1,2],[3,1]]
    >>> b = [[3,6],[2,9]]
    >>> c = [[5,1],[8,10]]
    >>> [x+y+z for x,y,z in zip(a, b, c)]
    [[1, 2, 3, 6, 5, 1], [3, 1, 2, 9, 8, 10]]
    >>>
    

    【讨论】:

    • 非常感谢 iCodez!
    【解决方案2】:

    你可以使用itertools.chain.from_iterable():

    >>> a = [[1, 2], [3, 1]]
    >>> b = [[3, 6], [2, 9]]
    >>> c = [[5, 1], [8, 10]]
    >>> from itertools import chain
    >>> [list(chain.from_iterable(x)) for x in zip(a, b, c)]
    [[1, 2, 3, 6, 5, 1], [3, 1, 2, 9, 8, 10]]
    

    如果您有任意数量的二维列表,这可能会很方便 - 例如:

    >>> list_of_lists = [
    ...     [[1, 2], [3, 1]],
    ...     [[3, 6], [2, 9]],
    ...     [[5, 1], [8, 10]],
    ...     # ...
    ...     [[4, 7], [11, 12]]
    ... ]
    >>> [list(chain.from_iterable(x)) for x in zip(*list_of_lists)]
    [[1, 2, 3, 6, 5, 1, ..., 4, 7], [3, 1, 2, 9, 8, 10, ..., 11, 12]]
    

    注意最后一个示例中list_of_lists 之前的*,这是argument unpacking 的示例。

    【讨论】:

      【解决方案3】:

      这可能是另一种使用 numpy 的解决方案,但速度要慢得多。

      import numpy as np
      
      a = [[1,2],[3,1]]
      b = [[3,6],[2,9]]
      c = [[5,1],[8,10]]
      
      print np.hstack((np.hstack((a,b)),c))
      
      # [[ 1  2  3  6  5  1]
      # [ 3  1  2  9  8 10]]
      

      如果您希望它具有列表格式,请使用

      np.hstack((np.hstack((a,b)),c)).tolist()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-25
        • 1970-01-01
        相关资源
        最近更新 更多