You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取矩阵中3个元素的最小和?能否使用zip实现?

问题描述

给定矩阵 A = [[1, 2, 4], [3, 5, 6], [7,8,9]],需要定义函数 sumof(A,3) 来寻找3个元素的最小和(示例中最小和为 1+2+3=6,输出为 (1,2,3)),请问是否可以使用 zip 函数实现该需求?


回答

当然可以用 zip 函数实现!虽然 zip 本身主要用于将可迭代对象按位置打包,但搭配一些基础的Python操作,就能轻松完成这个需求。下面我给你两种具体的实现思路:

思路一:结合 zip 与列表推导式扁平化矩阵

我们可以先用 zip(*A) 将矩阵转置(把原矩阵的列转换为元组),再通过列表推导式把所有元素收集起来,最后排序取前3个最小元素:

def sumof(A, n):
    # 用 zip(*A) 转置矩阵,遍历每个列元组收集所有元素
    all_elements = [num for col in zip(*A) for num in col]
    # 排序后取前n个最小元素,转为元组返回
    smallest_elements = sorted(all_elements)[:n]
    return tuple(smallest_elements)

# 测试
A = [[1, 2, 4], [3, 5, 6], [7,8,9]]
print(sumof(A, 3))  # 输出: (1, 2, 3)

思路二:结合 zip 与 itertools.chain 扁平化矩阵

如果偏好更简洁的迭代写法,可以用 itertools.chain 来快速扁平化转置后的矩阵元素:

import itertools

def sumof(A, n):
    # zip(*A) 转置矩阵,chain.from_iterable 扁平化所有元素
    all_elements = itertools.chain.from_iterable(zip(*A))
    smallest_elements = sorted(all_elements)[:n]
    return tuple(smallest_elements)

# 测试
A = [[1, 2, 4], [3, 5, 6], [7,8,9]]
print(sumof(A, 3))  # 输出: (1, 2, 3)

为什么 zip 能在这里起作用?

zip(*A) 的作用是转置矩阵,原矩阵的每一列会被打包成一个元组(比如原矩阵的第一列 [1,3,7] 会变成元组 (1,3,7))。虽然我们直接遍历原矩阵的行也能收集所有元素,但既然你明确询问能否用 zip,这就是一种完全可行的实现方式——本质是通过转置的方式,用 zip 作为元素收集的中间步骤。

需要注意的是,这个方案适用于“从矩阵中任选3个不同元素找最小和”的场景,如果你的需求是其他规则(比如每行必须选一个元素),那需要调整逻辑,但针对你给出的示例,上面的代码完全符合要求。

内容的提问来源于stack exchange,提问作者user6882757

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:02:54