有没有办法找到 min 函数选择的变量的名称?

Posted

技术标签:

【中文标题】有没有办法找到 min 函数选择的变量的名称?【英文标题】:Is there a way for finding the name of the variable that was selected by the min function? 【发布时间】:2021-12-11 08:50:37 【问题描述】:

在下面的 Python 代码中,我只是将 OPN_24n4 指定为 Node_23n3Node_24n4 的最小值。但是,我也想知道所选变量的名称。有没有一种简洁的方法来做到这一点?我想我可以使用某种 if 语句,但我认为可能有一个我不知道的功能。

OPN_24n4 = min(Node_23n3, Node_23n4)

【问题讨论】:

如果只是两个变量那么简单,你只需要一个 if 语句if Node_23n3 > Node_23n4: ... else ...(只要你不在乎它们是否相等)。不需要其他功能。如果你有两个以上,最好使用键和值的字典,而不是单独的变量。 " 但是,我也想知道选择的变量的名称。有没有简洁的方法?"不,因为没有选择变量min(就像您调用的任何其他函数一样)永远不会看到您的变量名称,实际上永远不会看到它提供的 已经被命名为变量。你同样可以写min(1, 2) 我觉得如果你解释更多你试图解决的问题,人们将能够告诉你为什么你不需要学习变量的名称 如果您只想跟踪第一个或第二个参数是否最小,那么您可能需要一个返回包含位置的元组的函数。 find_min = lambda x, y: (x, 1) if x <= y else (y, 2) 【参考方案1】:

minmaxsorted 可以采用 key 函数,该函数可以操作输入以便对输入的某些部分或其他内容进行比较,以及我们可以使用它,然后使用变量的名称及其值创建元组,并使用适当的键函数得到我们想要的结果

>>> min(("var1",10),("var2",2), key=lambda x:x[1])
('var2', 2)
>>> 

【讨论】:

【参考方案2】:

如果您使用列表,您可以使用 index 方法获取最小值的索引

>>> x = [5,3,7,1,9]
>>> x.index(min(x))
3
>>> 

【讨论】:

【参考方案3】:

您似乎不太可能需要这样的解决方案,而且它可能相对脆弱,但是借用 this answer,您可以使用 inspect 创建这样的解决方案:

import inspect

def named_min(*args):
    min_val = min(args)
    callers_local_vars = inspect.currentframe().f_back.f_locals.items()
    named_var = [var_name for var_name, var_val in callers_local_vars if var_val is args[args.index(min_val)]][0]
    if args.count(min_val) > 1:
        named_var = 'multiple'
    return min_val, named_var

Node_23n3 = 0
Node_23n4 = 1
OPN_24n4, name = named_min(Node_23n3, Node_23n4)
print(OPN_24n4, name)
Node_23n4 = 0
OPN_24n4, name = named_min(Node_23n3, Node_23n4)
print(OPN_24n4, name)
Node_23n3 = 2
OPN_24n4, name = named_min(Node_23n3, Node_23n4)
print(OPN_24n4, name)
Node_23n5 = -1
OPN_24n4, name = named_min(Node_23n3, Node_23n4, Node_23n5)
print(OPN_24n4, name)

这确实可以满足您的需求:

0 Node_23n3
0 multiple
0 Node_23n4
-1 Node_23n5

但我当然不会推荐它。

【讨论】:

以上是关于有没有办法找到 min 函数选择的变量的名称?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法找到要在 GetProcAddress 中使用的 C++ 错位名称?

有没有办法检索分配给 TableLayout 对象的变量名称以从另一个对象中识别?

有没有办法获取定义了make变量的makefile的名称?

有没有办法在 php 代码中显示未知的名称和值变量?

有没有办法选择 COMBOBOX 的内容进行复制/粘贴?

有没有办法在少于 O(n) 的时间内找到集合中的最小元素?