Как изменить функцию приоритета очереди приоритетов в Python? - PullRequest
0 голосов
/ 01 мая 2020

Я хочу реализовать алгоритм Джикстры в Python. Таким образом, когда я сохраняю узлы графа в очереди приоритетов, я хочу, чтобы они сортировались в порядке их расстояний от исходного узла. Как я могу изменить функцию приоритета, чтобы узлы сортировались таким образом? Я использую класс PriorityQueue в модуле очереди. По умолчанию введенные целые числа сортируются в порядке убывания, т. Е. Приоритет наименьшего элемента самый высокий. Я хочу ввести функцию приоритета, которая сортирует узлы на основе атрибута расстояния в объекте узла. Ниже приводится класс узла - расстояние до узла класса класса. Кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 01 мая 2020

Как объясняется в документации, PriorityQueue в python, похоже, не принимает пользовательские функции сравнения. Однако вы можете использовать min и обычный список для достижения желаемого, поскольку вызов функции min принимает функцию key, которая решает, какой элемент наименьший.

class node():
    def __init__(self, dist):
        self.dist = dist

def get_dist(node):
    return node.dist

nodes = [node(4), node(413), node(2), node(14), node(5)]

out = min(nodes, key=get_dist)
nodes.remove(out)
print('popped out:', out.dist) # popped out: 2

out = min(nodes, key=get_dist)
nodes.remove(out)
print('popped out:', out.dist) # popped out: 4

out = min(nodes, key=get_dist)
nodes.remove(out)
print('popped out:', out.dist) # popped out: 5
...