Как получить значения метода класса после вычисления min другого значения класса - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть класс "Node", который принимает в качестве аргументов x и y. Методы класса вычисляют разные значения. У меня есть несколько экземпляров этого класса под названием «узлы». Я хочу найти узел с наименьшим значением "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 ###

В этом случае самый низкий fcost между node1 и node2 - это fcost node2, поэтому я ожидаю, что результат будет: (2,2) или [2,2] Либо список, либо кортеж, в любом случае это нормально.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2019

Вы должны использовать функцию min().Вы можете использовать его по-разному, но в этом сценарии я думаю, что самым простым решением было бы использование лямбда-функции, которая является более коротким способом написания и определения функций в python.Вы можете прочитать больше о min() функции здесь , а также о лямбда-функциях здесь .

В любом случае, этот фрагмент кода должен работать просто отлично:

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
0 голосов
/ 06 апреля 2019

Используйте 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 будет использовать его для получения значения, которое будет сравниваться, чтобы найти минимальное.

...