给定三个或更多变量,我想找到具有最小值的变量名称。
我可以从列表中获取最小值,并且可以获取最小值列表中的索引。但我想要变量名。
我觉得还有另一种方法可以解决这个问题,我只是没有想到。
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
