【问题标题】:Get name of variable with highest integer from list Python 3.3.4从列表 Python 3.3.4 中获取具有最大整数的变量的名称
【发布时间】:2014-02-18 14:02:11
【问题描述】:

最近尝试了类似PHP get largest number from 3 variables的东西

(当然是 Python 的形式)但是当返回值时,我得到的是变量的值,而不是变量的名称。

我的数组如下所示:

x = 1

y = 2

z = 3

alloutputs = [x, y, z]

在需要帮助之前,最远和最丑陋的是:

alloutputs[alloutputs.index(max(alloutputs))]

但是它仍然给我一个最高值的整数!我如何取回 x、y 或 z 的名称,具体取决于哪个最大?

【问题讨论】:

  • 为什么需要变量名而不是值?可能有更好的选择,例如将这些变量转换为字典条目。
  • 变量只是临时符号;它们在算法之外没有任何意义,用于它们的符号是任意的。

标签: python list


【解决方案1】:

正如@zhangxaochen 所说,您需要使用字典或命名元组。你可以使用这样的字典:

>>> d = {'x': 1, 'y': 2, 'z': 3}
>>> max(d, key=d.get)
'z'

【讨论】:

  • 你的意思是max(d, key=d.get)
  • 感谢您对字典的建议,这仍然可以满足我的需求并且效果很好。谢谢。
【解决方案2】:
x, y, z = 1, 2, 3
alloutputs = ["x", "y", "z"]
print max(alloutputs, key = locals().get)

但是,如果您真的必须这样做,您可能需要重新考虑您的设计,恕我直言。

【讨论】:

  • 当您使用适当的、单独的字典代替 locals() 时,它会变成完美的设计。
  • @delnan 你的意思是,取决于变量的名称被认为是一个好的设计?
  • 一点也不。我说的是它不是一个变量名,只是一个字典键(很可能不是硬编码,而是来自动态数据源)。
  • @delnan 但是 OP 正在尝试获取具有最大值的变量名称。这就是我希望他重新考虑设计的原因。
  • 我同意,我已经在对该问题的评论中告诉 OP 同样的事情。
【解决方案3】:

列表不保存变量的名称。使用字典或namedtuple

In [296]: d=dict(x=1, y=2, z=3)

In [297]: from operator import itemgetter
     ...: max(d.items(), key=itemgetter(1))[0]
     ...: 
Out[297]: 'z'

【讨论】:

  • sorted(...)[-1] 拼写max(...) 是一种愚蠢的方式。
【解决方案4】:

免责声明:这很糟糕,您不应该这样做。

[var for var in dir() if eval(var) == max(all)][0]

它可以满足您的需求,但是 - 正如其他人所说 - 使用字典会更好。

【讨论】:

    【解决方案5】:

    你可以使用字典:

    alloutputs = {'x':1,'y':2,'z':3}
    maxvalue = max(alloutputs.values())
    print [k for k, v in alloutputs.iteritems() if v == maxvalue]
    

    【讨论】:

    • 翻阅字典就像用一个加载的 Uzi 将某人用棍棒打死。使用maxkey 参数,例如max(alloutputs, key=alloutputs.get) 或类似的东西。
    猜你喜欢
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 2020-12-02
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多