【问题标题】:Adding each element in a 2d list to another 2d list in Python将二维列表中的每个元素添加到 Python 中的另一个二维列表
【发布时间】:2021-10-13 16:29:08
【问题描述】:

所以我需要定义一个函数,在其中我得到 2 个二维列表。目标是将每个元素相互添加。


list1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
list2 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

结果应该是这样的:

   result = [[2,4,6], [8,10,12],[14,16,18]]

到目前为止,我构建了这个函数:

def add_matrices(list1, list2):
    matrix = list1 + list2
    return matrix

但我现在有点卡住了,我尝试使用附加和扩展,但都没有工作。我找到了一些需要使用 numpy 的解决方案,不幸的是,这不允许这样做。有人可以指导我正确的方向吗?

【问题讨论】:

  • 如果它们是 numpy 数组,这将是一个简单的 list1 + list2

标签: python list 2d element


【解决方案1】:

一种方法:

list1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
list2 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]


res = [[e1 + e2 for e1, e2 in zip(li1, li2)] for li1, li2 in zip(list1, list2)]
print(res)

输出

[[2, 4, 6], [8, 10, 12], [14, 16, 18]]

使用map的功能替代:

from operator import add
res = [list(map(add, li1, li2)) for li1, li2 in zip(list1, list2)]
print(res)

更新

如果需要返回None,如果任何内部列表的长度不匹配,请执行以下操作:

list1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
list2 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]


def list_sum(lst1, lst2):
    if any(len(e1) != len(e2) for e1, e2 in zip(lst1, lst2)):
        return None
    return [[e1 + e2 for e1, e2 in zip(li1, li2)] for li1, li2 in zip(list1, list2)]


print(list_sum(list1, list2))
print(list_sum([[1, 2], [4, 5], [7, 8]], [[1, 2, 3], [4, 5, 6], [7, 8, 9]]))

输出

[[2, 4, 6], [8, 10, 12], [14, 16, 18]]
None

【讨论】:

  • 谢谢 :) 我还有另一个问题,如果每个二维列表中的元素数量不相等,我想返回一个 None 语句怎么办?例如:列表 1 = [[1,2], [4,5],[7,8]] 列表 2 = [[1,2,3], [4,5,6],[7,8, 9]]
  • 每个子列表或整个输出都没有,[无,无,无]或无?
  • 整个输出都没有。
  • @sari023 更新了答案!
猜你喜欢
  • 1970-01-01
  • 2022-09-23
  • 2021-08-06
  • 2021-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
相关资源
最近更新 更多