如果我正在为不同的变量做一些数学函数,例如:
a = x - y
b = x**2 - y**2
c = (x-y)**2
d = x + y
如何从所有变量中找到最小值。例如:
a = 4
b = 7
c = 3
d = 10
因此c的最小值为3。我怎样才能让我的程序这样做。
问题是,如果我将a,b,c,d附加到列表中,我必须执行以下操作:
lst.append((a,b,c,d))
这使得名单成为 - [(4,7,3,10)]
仅使所有值与一个索引相关(lst [0])
如果可能的话,有什么替代方法可以做到这一点或以任何可能的方式找到最低限度!
LNG - PYTHON
谢谢
答案 0 :(得分:3)
你可以找到像这样的最小项目的索引
>>> L = [4,7,3,10]
>>> min(range(len(L)), key=L.__getitem__)
2
现在您知道了索引,您也可以获得实际项目。例如:L[2]
另一种以(index, item)
>>> min(enumerate(L), key=lambda x:x[1])
(2, 3)
我认为你可能会以错误的方式解决你的问题,但如果你知道他们的名字,就可以从本地命名空间中提取变量的值。例如
>>> a = 4
>>> b = 7
>>> c = 3
>>> d = 10
>>> min(enumerate(['a', 'b', 'c', 'd']), key=lambda x, ns=locals(): ns[x[1]])
(2, 'c')
更好的方法是使用dict,所以你没有用这些“垃圾”变量填充你的工作命名空间
>>> D = {}
>>> D['a'] = 4
>>> D['b'] = 7
>>> D['c'] = 3
>>> D['d'] = 10
>>> min(D, key=D.get)
'c'
>>> min(D.items(), key=lambda x:x[1])
('c', 3)
您可以看到,当使用正确的数据结构时,所需的代码量要少得多。
答案 1 :(得分:1)
如果您将数字存储在列表中,则可以使用复选为reduce
的{{1}},因为列表未排序。
O(n)
答案 2 :(得分:0)
buiit-in函数min
可以解决问题。在您的示例中,min(a,b,c,d)
将产生3。
答案 3 :(得分:0)
打包为字典,找到最小值,然后找到具有匹配值(可能超过一个最小值)的键
D = dict(a = 4, b = 7, c = 3, d = 10)
min_val = min(D.values())
for k,v in D.items():
if v == min_val: print(k)