【问题标题】:Find the row and column with the min value in python?在python中找到最小值的行和列?
【发布时间】:2013-04-16 16:02:53
【问题描述】:

我的程序中有一个函数可以进行拆分和浮动。然后将矩阵传递给主程序。现在我有一个函数可以找到最小值的行和列。我得到了所有值的列表,但不是具有最小值的行和列。

def closest_pair(e):
    for row in range(len(e)):
       for col in range(0,len(row),1):
          minrow = min(e[row])
          mincol = min(e[col])
          return ([minrow], [mincol])

E 是从 main 传递给此函数的方阵。 输入是txt文件,其值如下:

2 1 7 7
1 2 7 7
2 5 6 7
5 6 8 9

预期的输出应该是 (1, 1) 或矩阵中具有低值的第 1 行和第 1 列。

这帮助我找到了行和列的最小值,但输出是得到这对。同样对于第一个值为 0 的值,0 将不计入,因此如果 (0, 0) 的值为 0,则不算作最小值。话虽如此,例如,如果第 1 行和第 1 列,值是 [2,2] 作为对,并且是唯一比输出 (1,1) 的最小对。

【问题讨论】:

  • 您能发布一个示例输入和预期输出吗?
  • 预期的输出是整个二维数组的最小值吗?
  • 对于您的示例,我会说位置(0, 1)(1, 0) 都符合条件,但不是 位置(1, 1),因为它指向@987654326 的值@.

标签: python


【解决方案1】:

你需要找到每行的最小值,然后你才能确定最小列的行的坐标是什么:

result = min((min((v, c) for c, v in enumerate(row)), r) for r, row in enumerate(e))
return result[1], result[0][1]

此代码使用enumerate() 用列索引注释每个值,找到每行 的最小值,用行号(再次使用enumerate)注释每一行的最小值并找到最小值排。结果是一个带有((value, column), row) 的嵌套元组,我们将其解包以返回行和列索引。

演示:

>>> e = [[2, 1, 7, 7], [1, 2, 7, 7], [2, 5, 6, 7], [5, 6, 8, 9]]
>>> result = min((min((v, c) for c, v in enumerate(row)), r) for r, row in enumerate(e))
>>> result[0][1], result[1]
(0, 1)

所以位置e[0][1] 是矩阵中的a 最小值。如果您还想包含该位置的确切值,请返回:

return result[1], result[0][1], result[0][0]

【讨论】:

    【解决方案2】:

    e 是一个列表列表,对吗?

    因此min(e[row])min(e[col]) 将为您提供列表。

    您还可以使用 enumerate 更轻松地遍历列表

    for col, row in enumerate(e):
      minrow = min(row)
      mincol = min([row[col] for row in e]) # need to transpose to a new list
      return ([minrow], [mincol])
    

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 2019-03-17
      • 1970-01-01
      • 2023-01-05
      • 1970-01-01
      相关资源
      最近更新 更多