【问题标题】:Extract min value node [duplicate]提取最小值节点[重复]
【发布时间】:2021-12-16 10:24:02
【问题描述】:

我有以下课程:

class Node:  
    def __init__(self, node, value, left=None, right=None):
        self.node = node    
        self.value = value  
        self.left = left    
        self.right = right  
        self.code = ''      

我有一个节点列表。问题是,如何提取self.value属性最低的节点?

【问题讨论】:

  • @MauriceMeyer 这似乎是一个树节点,而不是一个列表
  • @Sergio 请显示包含“节点列表”的代码

标签: python algorithm nodes


【解决方案1】:

您可以使用内置的min 函数和匿名函数来访问值参数:

min(listNodes, key=lambda x: x.value)

或者你可以在Node中定义丰富的比较方法__lt____eq__(你可以定义额外的丰富的比较方法,但是这两个对于像min这样的排序就足够了):

class Node:def __init__(self, node, value, left=None, right=None):
        self.node = node    
        self.value = value  
        self.left = left    
        self.right = right  
        self.code = '' 
 
    def __iter__(self):
        return self

    def __lt__(self, other):
        return self.value < other.value
    
    def __eq__(self, other):
        return self.value == other.value

这将允许min 直接比较找到最小值的节点!

min(listNodes)

在 Python3 之前,可以使用现已弃用的 __cmp__ 方法一次创建所有丰富的比较方法;见Question About ThisLinked Official Notes

【讨论】:

  • 这假设 Node 是可迭代的...
  • @OneCricketeer 我在类中添加了__iter__ 函数,但我不确定它是否可以在没有它的情况下工作,因为列表中的所有元素都是相同的类类型并且 lambda 函数是获取值属性
  • return self__iter__ 的定义没有意义。假设,OP想要min([self.value, self.left.value, self.right.value])(递归)
  • 请注意,cmp 在 Python3 中已消失,因此(对于这种情况)__lt____eq__ 应改为定义(尽管实际上签名相同)参见 stackoverflow.com/questions/22490366/how-to-use-cmp-in-python-3跨度>
  • @ti7 感谢您告诉我,建议编辑此答案以改进代码
猜你喜欢
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
  • 2012-11-26
  • 2017-05-24
  • 2013-06-11
  • 1970-01-01
相关资源
最近更新 更多