给出一个矩阵:
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()
函数以外的其他函数
使用可以转移到其他语言的东西。
答案 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.chain
,filter
将所有数字压缩到结果列表中,对数字进行排序并打印第一个。
如果您想避免排序,您还可以执行以下操作:
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