如何在计算其他 class 值的最小值后获取 class 方法的值
How to get values of class method after calculating min of other class value
我有一个 "Node" class 作为参数 x 和 y。 class 方法计算不同的值。我有多个此 class 的实例,称为 "nodes"。我想要的是找到具有最低 "fcost" 的节点并获取该节点的 x 和 y 坐标。
我不知道如何解决这个问题,如果你能帮助我,我将不胜感激。
class Node():
# Node class
def __init__(self, y, x):
self.y = y
self.x = x
def gcost(self):
return self.x + self.y
def hcost(self):
return self.x * self.y
def fcost(self):
return self.gcost() + self.hcost() # method that indicates
# which node to choose
node1 = Node(5,5)
node2 = Node(2,2)
nodes = [node1, node2] # I actually don't know if I should create a
# list of nodes so please tell me if I should
# not
### CODE TO SOLVE THE PROBLEM ###
在这种情况下,节点 1 和节点 2 之间的最低 fcost 是节点 2 的 fcost,因此我希望输出为:
(2,2)
或 [2,2]
无论是列表还是元组,都可以。
使用min(list, key=...)
。
min_node = min(nodes, key=lambda n:n.fcost())
print(min_node, min_node.fcost(), min_node.x, min_node.y)
key
必须是函数名。
min
将使用它来获取值,它将比较该值以找到最小值。
您应该使用 min()
函数。您可以以不同的方式使用它,但在这种情况下,我认为最简单的解决方案是使用 lambda 函数——这是在 python 中编写和定义函数的更短方式。
您可以阅读有关 min()
函数 here, and more about lambda functions here 的更多信息。
无论如何,这段代码应该可以正常工作:
class Node():
# Node class
def __init__(self, y, x):
self.y = y
self.x = x
def gcost(self):
return self.x + self.y
def hcost(self):
return self.x * self.y
def fcost(self):
return self.gcost() + self.hcost()
node1 = Node(5,5)
node2 = Node(2,2)
nodes = [node1, node2]
needed_node = min(nodes, key=lambda x:x.fcost())
needed_list = [needed_node.x, needed_node.y] # in case you want the result as a list
needed_tuple = (needed_node.x, needed_node.y) # in case you want the result as a tuple
我有一个 "Node" class 作为参数 x 和 y。 class 方法计算不同的值。我有多个此 class 的实例,称为 "nodes"。我想要的是找到具有最低 "fcost" 的节点并获取该节点的 x 和 y 坐标。
我不知道如何解决这个问题,如果你能帮助我,我将不胜感激。
class Node():
# Node class
def __init__(self, y, x):
self.y = y
self.x = x
def gcost(self):
return self.x + self.y
def hcost(self):
return self.x * self.y
def fcost(self):
return self.gcost() + self.hcost() # method that indicates
# which node to choose
node1 = Node(5,5)
node2 = Node(2,2)
nodes = [node1, node2] # I actually don't know if I should create a
# list of nodes so please tell me if I should
# not
### CODE TO SOLVE THE PROBLEM ###
在这种情况下,节点 1 和节点 2 之间的最低 fcost 是节点 2 的 fcost,因此我希望输出为:
(2,2)
或 [2,2]
无论是列表还是元组,都可以。
使用min(list, key=...)
。
min_node = min(nodes, key=lambda n:n.fcost())
print(min_node, min_node.fcost(), min_node.x, min_node.y)
key
必须是函数名。
min
将使用它来获取值,它将比较该值以找到最小值。
您应该使用 min()
函数。您可以以不同的方式使用它,但在这种情况下,我认为最简单的解决方案是使用 lambda 函数——这是在 python 中编写和定义函数的更短方式。
您可以阅读有关 min()
函数 here, and more about lambda functions here 的更多信息。
无论如何,这段代码应该可以正常工作:
class Node():
# Node class
def __init__(self, y, x):
self.y = y
self.x = x
def gcost(self):
return self.x + self.y
def hcost(self):
return self.x * self.y
def fcost(self):
return self.gcost() + self.hcost()
node1 = Node(5,5)
node2 = Node(2,2)
nodes = [node1, node2]
needed_node = min(nodes, key=lambda x:x.fcost())
needed_list = [needed_node.x, needed_node.y] # in case you want the result as a list
needed_tuple = (needed_node.x, needed_node.y) # in case you want the result as a tuple