【问题标题】:How do you merge a two dimensional and a three dimensional list together?如何将二维和三维列表合并在一起?
【发布时间】:2020-02-04 04:06:34
【问题描述】:

我无法确定要编写的将二维列表合并到三维列表的代码。例如,“a”是二维列表,“b”是三维列表,我想将它们合并在一起并按顺序排序。如果这是可能的,可以通过了解列表理解来完成吗?另一个例子是我下面的两个列表。

a = [[7, 28],[28],[28]]
b = [[[3, 9],[3, 9],[3, 9]],[[3, 4],[4, 7],[4, 7]],[[7, 11],[3, 11],[3, 7, 12]]]

我希望我的结果是

c = [[[3, 7, 9, 28],[3, 7, 9, 28],[3, 7, 9, 28]],
     [[3, 4, 28],[4, 7, 28],[4, 7,28]],
     [[7, 11, 28],[3, 11, 28],[3, 7, 12, 28]]]

【问题讨论】:

  • 第二层的长度是真的吗?
  • 是的。你觉得可以吗

标签: python python-3.x list multidimensional-array merge


【解决方案1】:

试试这个:

c = [[sorted(i+k) for k in j] for i,j in zip(a,b)]

输出

[[[3, 7, 9, 28], [3, 7, 9, 28], [3, 7, 9, 28]], 
 [[3, 4, 28], [4, 7, 28], [4, 7, 28]], 
 [[7, 11, 28], [3, 11, 28], [3, 7, 12, 28]]]

这是另一种没有单线的方法:

c = b[:]
for i,j in zip(a,c):
    for k in j:
        k.extend(i)
        k.sort()

【讨论】:

    【解决方案2】:

    另一个 1-liner,使用 enumerate 而不是 zip

    c = [[sorted(s1+a[i]) for s1 in s0] for i, s0 in enumerate(b)]
    

    【讨论】:

      【解决方案3】:

      这应该可行:

      c = [[sorted(i+x) for i in y] for x, y in zip(a,b)]
      
      print(c)
      #[[[3, 7, 9, 28],[3, 7, 9, 28],[3, 7, 9, 28]],[[3, 4, 28],[4, 7, 28],[4, 7,28]],[[7, 11, 28],[3, 11, 28],[3, 7, 12, 28]]
      

      【讨论】:

        【解决方案4】:

        如果你喜欢oneliner:

        result = [[sorted(i+x) for i in y] for x, y in zip(a,b)]
        
        print (result)
        
        #[[[3, 9, 7, 28], [3, 9, 7, 28], [3, 9, 7, 28]], [[3, 4, 28], [4, 7, 28], [4, 7, 28]], [[7, 11, 28], [3, 11, 28], [3, 7, 12, 28]]]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-17
          • 2019-02-25
          • 1970-01-01
          • 2021-10-25
          • 2021-12-18
          • 2021-08-06
          • 2018-02-03
          • 2017-10-12
          相关资源
          最近更新 更多