【问题标题】:Summing list of lists with another list of lists in Python将列表列表与 Python 中的另一个列表列表相加
【发布时间】:2021-07-29 04:12:13
【问题描述】:

假设我有两个列表,a 和 b:

a = [[1,2,3],[4,5,6]]

b = [[7,8,9],[1,2,3]]

如果 a 和 b 都是数字列表,我可以将它们转换为数组并使用 Python 获得 a+b 的总和。但是,如果 a 和 b 是列表列表,我似乎无法做同样的事情。有没有类似的方法,不用for或者while cicles?

编辑想要的结果是 [[8,10,12],[5,7,9]]

【问题讨论】:

  • 期望的结果应该是什么?
  • 与你的问题无关,你为什么不使用numpy数组?
  • [[i + j for i, j in zip(x, y)] for x, y in zip(a, b)]?
  • "我可以将它们转换为数组" - 您也可以将列表列表转换为数组

标签: python list multidimensional-array


【解决方案1】:

列表压缩:

[[a + b for a, b in zip(x, y)]for x, y in zip(a, b)]

另一种方式:

k = []
for x, y in zip(a, b):
    p = []
    for a, b in zip(x, y):
        p.append(a + b)
    k.append(p)
print(k)

【讨论】:

    【解决方案2】:
    import numpy as np
    a = [[1,2,3],[4,5,6]]
    
    b = [[7,8,9],[1,2,3]]
    
    a=np.array(a)
    a=a.flatten()
    b=np.array(b)
    b=b.flatten()
    c=np.add(a,b)
    print(a)
    print(b)
    print(c)
    output:
    a=[1 2 3 4 5 6]
    b=[7 8 9 1 2 3]
    c=[ 8 10 12  5  7  9]
    

    在此之后,如果您想要列表列表,您可以像这样重塑它:

    c=np.reshape(c,[2,3])
    

    【讨论】:

    • 为什么先展平再重塑?您可以只写np.add(a, b) 或只写a + b 以获得所需的结果。
    • 是的,这可以在制作 numpy 数组后完成,但我不知道他是否想要 1d 数组或 2d 的答案,如果你不想重塑,你可以先添加然后展平,操作选择
    • 问题中OP想要的结果是[[8,10,12],[5,7,9]],和原始数据的形状一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多