查找不同变量的最小值

2024-04-29 07:01:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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

a = x - y
b = x**2 - y**2
c = (x-y)**2
d = x + y

我怎样才能找到所有变量的最小值呢。例如:

^{pr2}$

所以c的最小值是3。我怎么让我的程序做到这一点呢。在

  • 到目前为止我有什么想法:
  • 列一张单子
  • 在列表中添加d,b,c
  • 对列表排序
  • 打印列表[0],因为它将是最小值。在

问题是,如果我把a,b,c,d加到一个列表中,我必须做如下事情:

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

这使得列表- [(4,7,3,10)]

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

如果可能的话,有没有其他的替代品来做这件事,或者以任何可能的方式来找到最小值!在

液化天然气-Python

谢谢你


Tags: 函数程序替代品列表排序方式数学事情
3条回答

你可以找到像这样最小的项目的索引

>>> L = [4,7,3,10]
>>> min(range(len(L)), key=L.__getitem__)
2

现在你知道了索引,你也可以得到实际的项目。例如:L[2]

另一种以(index, item)形式找到答案的方法

^{pr2}$

我认为解决问题的方法可能是错误的,但是如果知道变量的名称,就可以从本地命名空间中提取变量的值。例如

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

您可以看到,当使用正确的数据结构时,所需的代码量要少得多。在

如果将数字存储在列表中,则可以使用一个reduce的复杂度,因为列表没有排序。在

numbers = [999, 1111, 222, -1111]
minimum = reduce(lambda mn, candidate: candidate if candidate < mn else mn, numbers[1:], numbers[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)

相关问题 更多 >