我的程序中有一个函数可以执行split和float。然后将矩阵传递给主程序。现在我有一个函数来查找具有最小值的行和列。在Martijn Pieters的帮助下,我能够获得最小值但是这对。输出示例如下。 E是从main传递给此函数的方阵。
值存储在txt文件中并在单独的函数中读取,矩阵传递给main。从它们的矩阵传递给下面的函数。
0 2 8 9
2 4 9 9
4 7 4 8
3 4 8 9
代码:
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])'''
result = min((min((v, c) for c, v in enumerate(row)), r) for r, row in enumerate(e))
return result[1], result[0][1]
这有助于我找到行和列的最小值,但是输出是为了获得该对。同样对于第一个值为0的情况,如果(0,0)的值为0则不计算0,那么不计入最小值。如上所述,例如,如果第1行和第1列,值为[2,2]作为对,并且是唯一的最小对,而不是输出(1,1)。
答案 0 :(得分:1)
你想要这个吗?
>>> def closest_pair(e):
... remapped = [(e[x][y], (x, y)) for x, row in enumerate(e) for y, col in enumerate(row)]
... return min(remapped)
...
>>> a = [[0, 2, 8, 9], [2, 4, 9, 9], [4, 7, 4, 8], [3, 4, 8, 9]]
>>> closest_pair(a)
(0, (0, 0))
或者:
def closest_pair(e):
return min(
(e[x][y], (x, y))
for x, row in enumerate(e)
for y, col in enumerate(row)
)