矩阵的每一行和每一列中的最小值 - Python

S.T*_*roy 1 python algorithm matrix min python-3.x

有人可以帮我吗?我试图获得这个矩阵的每一行和每一列的最小值

matrix =[[12,34,28,16],
        [13,32,36,12],
        [15,32,32,14],
        [11,33,36,10]]
Run Code Online (Sandbox Code Playgroud)

例如:我希望我的程序打印出 12 是第 1 行的最小值,依此类推。

For*_*Bru 5

让我们重复任务语句:“获取此矩阵的每一行每一列的最小值”。

好的,所以,如果矩阵有n行,你应该得到n最小值,每一行一个。听起来很有趣,不是吗?所以,代码看起来像这样:

result1 = [<something> for row in matrix]
Run Code Online (Sandbox Code Playgroud)

那么,你需要对每一行做什么?对了,求最小值,超级简单:

result1 = [min(row) for row in matrix]
Run Code Online (Sandbox Code Playgroud)

作为result,您将获得一个n值列表,正如预期的那样。


等等,现在我们只找到了每一行的最小值,而不是每的最小值,所以让我们也这样做!

鉴于您使用的是 Python 3.x,您可以做一些非常了不起的事情。例如,您可以轻松地遍历列:

result2 = [min(column) for column in zip(*matrix)] # notice the asterisk!
Run Code Online (Sandbox Code Playgroud)

中的星号zip(*matrix)使's 的每一行成为matrix一个单独的参数zip,如下所示:

zip(matrix[0], matrix[1], matrix[2], matrix[3])
Run Code Online (Sandbox Code Playgroud)

这看起来不太可读,并且取决于行数matrix(基本上,您必须对它们进行硬编码),并且星号可以让您编写更清晰的代码。

zip返回元组,i第 th 元组包含所有行的i第 th 个值,因此这些元组实际上是给定矩阵的列。


现在,您可能会发现这段代码有点难看,您可能想以更简洁的方式编写相同的内容。果然,你可以使用一些函数式编程魔法:

result1 = list(map(min, matrix))
result2 = list(map(min, zip(*matrix)))
Run Code Online (Sandbox Code Playgroud)

这两种方法是绝对等价的。