在python中找到min值的行和列?

时间:2013-04-16 16:02:54

标签: python

我的程序中有一个函数可以执行split和float。然后将矩阵传递给主程序。现在我有一个函数来查找具有最小值的行和列。我得到了所有值的列表,但没有得到具有最小值的行和列。

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)。

2 个答案:

答案 0 :(得分:2)

您需要找到每行的最小值 ,然后才能确定具有最小列的行的坐标:

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]

答案 1 :(得分:0)

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])