【问题标题】:Is there a way for finding the name of the variable that was selected by the min function?有没有办法找到 min 函数选择的变量的名称?
【发布时间】: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)

标签: python min


【解决方案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
      

      但我当然不会推荐它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-30
        • 2021-09-06
        • 1970-01-01
        • 1970-01-01
        • 2021-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多