使用Python查找矩阵中的最小值(不使用内置的min函数)

时间:2015-10-30 12:56:26

标签: python algorithm python-3.x matrix

给出一个矩阵:

matrix = {
    "A": ['-' , 6   , '-' , 4   , '-' , '-' ],
    "B": [6   , '-' , 1   , 3   , 8   , 2   ],
    "C": ['-' , 1   , '-' , '-' , '-' , 3   ],
    "D": [4   , 3   , '-' , '-' , 4   , '-' ],
    "E": ['-' , 8   , '-' , 4   , '-' , 4   ],
    "F": ['-' , 2   , 3   , 4   , 4   , '-' ]
}

如何找到最小值?

我想使用min()函数以外的其他函数 使用可以转移到其他语言的东西。

5 个答案:

答案 0 :(得分:1)

请记住,这是dictionary,而不是matrix。循环遍历每个值并将所有时间保存为最小值。

dict = {"A": ['-' , 6   , '-' , 4   , '-' , '-' ],
          "B": [6   , '-' , 1   , 3   , 8   , 2   ],
          "C": ['-' , 1   , '-' , '-' , '-' , 3   ],
          "D": [4   , 3   , '-' , '-' , 4   , '-' ],
          "E": ['-' , 8   , '-' , 4   , '-' , 4   ],
          "F": ['-' , 2   , 3   , 4   , 4   , '-' ]
}

min = 1337133713371337
for i in dict.values():
    for m in i:
        if m < min:
            min = m
print min

答案 1 :(得分:1)

这是一个Python 2解决方案(对Python 3不起作用):

d = []
for x in matrix.values():
    d.extend(x)
d = list(filter(lambda x: isinstance(x, int), d))
min = d[0]
for m in d:
    if m < min:
        min = m

答案 2 :(得分:1)

这是一个单行:

from itertools import chain
print sorted(filter(lambda x: isinstance(x, (int, long, float)), chain.from_iterable(matrix.values())))[0]

发生了什么事?

正如已经指出的那样,你有一本字典,而不是一个矩阵;您可以使用matrix.values()访问的值。然后,使用itertools.chainfilter将所有数字压缩到结果列表中,对数字进行排序并打印第一个。

如果您想避免排序,您还可以执行以下操作:

from itertools import chain
newL = filter(lambda x: isinstance(x, (int, long, float)), chain.from_iterable(matrix.values()))
# [6, 4, 1, 3, 6, 1, 3, 8, 2, 8, 4, 4, 4, 3, 4, 2, 3, 4, 4]
minVal = newL[0]
for val in newL:
    if val < minVal:
        minVal = val

答案 3 :(得分:0)

matrix['A'].sort()

matrix['A'][0] #this is the smallest value

for each in matrix:
    matrix[each].short()
    matrix[each][0]

答案 4 :(得分:0)

或者,如果你有 numpy

# your dictionary
In [128]: matrix
Out[128]: 
{'A': ['-', 6, '-', 4, '-', '-'],
 'B': [6, '-', 1, 3, 8, 2],
 'C': ['-', 1, '-', '-', '-', 3],
 'D': [4, 3, '-', '-', 4, '-'],
 'E': ['-', 8, '-', 4, '-', 4],
 'F': ['-', 2, 3, 4, 4, '-']}

In [129]: import numpy as np

In [130]: m = np.array(list(matrix.values()))

In [131]: m
Out[131]: 
array([['-', '6', '-', '4', '-', '-'],
       ['4', '3', '-', '-', '4', '-'],
       ['-', '2', '3', '4', '4', '-'],
       ['-', '8', '-', '4', '-', '4'],
       ['-', '1', '-', '-', '-', '3'],
       ['6', '-', '1', '3', '8', '2']], 
      dtype='<U1')

# masking out '-' elements and find the min for their int type values
In [132]: m[np.where(m != '-')].astype(int).min()
Out[132]: 1