查找不同变量的最小值

时间:2015-11-11 00:37:56

标签: python list min

如果我正在为不同的变量做一些数学函数,例如:

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
  • 对列表进行排序
  • 打印列表[0],因为它将是最小值。

问题是,如果我将a,b,c,d附加到列表中,我必须执行以下操作:

lst.append((a,b,c,d))

这使得名单成为 -     [(4,7,3,10)]

仅使所有值与一个索引相关(lst [0])

如果可能的话,有什么替代方法可以做到这一点或以任何可能的方式找到最低限度!

LNG - PYTHON

谢谢

4 个答案:

答案 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)