Merge multiple 2d lists considering axis in order

前端 未结 3 1775
予麋鹿
予麋鹿 2021-01-13 11:50

My purpose is to combine multiple 2d list in order such as:

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


        
相关标签:
3条回答
  • 2021-01-13 12:12

    You could use 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]]
    

    This might be handy if you have an arbitrary number of 2D lists - for example:

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

    Note the * before list_of_lists in this last example, which is an example of argument unpacking.

    0 讨论(0)
  • 2021-01-13 12:20

    This might be another solution using numpy but this is much slower.

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

    and if you want it to have a list format then use

    np.hstack((np.hstack((a,b)),c)).tolist()
    
    0 讨论(0)
  • 2021-01-13 12:31

    You can use zip and a list 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]]
    >>>
    
    0 讨论(0)
提交回复
热议问题