Skip to main content
 首页 » 编程设计

python之如何找到最小(或最大)属性的名称

2025年05月04日20thcjp

给定三个或更多变量,我想找到具有最小值的变量名称。

我可以从列表中获取最小值,并且可以获取最小值列表中的索引。但我想要变量名。

我觉得还有另一种方法可以解决这个问题,我只是没有想到。

a = 12 
b = 9 
c = 42 
cab = [c,a,b] 
 
# yields 9 (the min value) 
min(cab)  
 
# yields 2 (the index of the min value) 
cab.index(min(cab)) 

什么代码会产生 'b'?

请您参考如下方法:

vars 的神奇之处在于,如果您想在实例变量中包含内容,则不必预先创建字典:

class Foo(): 
   def __init__(self, a, b, c): 
     self.a = a 
     self.b = b 
     self.c = c 
 
   def min_name(self, names = None): 
     d = vars(self) 
     if not names: 
       names = d.keys() 
 
     key_min = min(names, key = (lambda k: d[k])) 
     return key_min 

在行动中

>>> x = Foo(1,2,3) 
>>> x.min_name() 
 'a' 
>>> x.min_name(['b','c']) 
 'b' 
>>> x = Foo(5,1,10) 
>>> x.min_name() 
 'b' 

现在,如果您在 min_name 的参数列表中传递无效的变量名,它会崩溃,但这是可以解决的。

您还可以更新字典,它反射(reflect)在源代码中

  def increment_min(self): 
    key = self.min_name() 
    vars(self)[key] += 1 

例子:

>>> x = Foo(2,3,4) 
>>> x.increment_min() 
>>> x.a 
3