Comportement lors de la liste dans Python heapq

Quand je faisais de la programmation de compétition et que j'essayais d'implémenter Dijkstra en Python, je voulais que heapq soit trié par distance en insérant quelque chose comme ("nom vertical", distance), mais j'étais un peu inquiet du comportement à ce moment-là. C'est un article mémo que je viens de confirmer.

Je me suis demandé si quelque chose comme un opérateur personnalisé pouvait être mis en place, mais cela ralentit généralement si je le fais moi-même, donc je voulais l'éviter autant que possible.

Je pense que c'est une spécification heapq ou une spécification d'opérateur de comparaison Python, mais je vais la résumer car c'est un gros problème.

Conclusion

Si vous plongez la liste dans heapq, ** Ordre croissant du premier élément → Ordre croissant du deuxième élément **. Il semble que l'évaluation de chaque élément se fasse indépendamment, il est donc normal de mélanger des nombres et des chaînes de caractères.

En bref

[[1,4],[2,0],[0,1],[0,3]]
↓
[[0,1],[0,3],[1,4],[2,0]]

Ce sera comme.

Vérification 1


import heapq
import random
a = []
heapq.heapify(a)

for i in range(5):
    heapq.heappush(a,[random.randint(0,10) for i in range(2)])

while a:
    print(heapq.heappop(a))
[0, 10]
[2, 7]
[2, 7]
[2, 10]
[5, 0]

Vérification 2


for i in range(5):
    heapq.heappush(a,[random.randint(0,10),chr(random.randint(97,97+26))])

while a:
    print(heapq.heappop(a))
[0, 'k']
[4, 'd']
[4, 'l']
[5, 'c']
[7, 'o']

c'est tout. J'aime Python parce que ça me fait du bien, mais je n'aime pas ça parce que j'ai parfois des accidents (contradiction).

Recommended Posts

Comportement lors de la liste dans Python heapq
Comportement lors de l'enregistrement d'un objet datetime python dans MongoDB
Attention lorsque os.mkdir en Python
Précautions lors de l'utilisation de Pit avec Python
Vérifiez le comportement lors de l'attribution de Python
Lors de l'utilisation d'expressions régulières en Python
Lors de l'écriture d'un programme en Python
Comportement lors du retour dans le bloc with
Créer ScriptableObject en Python lors de la construction d'ADX2
Précautions lors du décapage d'une fonction en python
[python, multitraitement] Comportement des exceptions lors de l'utilisation du multitraitement
Lors de l'examen de l'utilisation de la mémoire dans Python 3
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
SendKeys en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
[Astuces] Écriture facile à lire lors de la connexion de fonctions en Python
Lorsque le codec ne peut pas décoder l'octet apparaît en python
Quand j'essaye matplotlib en Python, il dit 'cairo.Context'
[python, CPython] Comportement du GC lors de la levée d'une exception
Précautions lors du traitement des structures de contrôle dans Python 2.6
Remarque sur l'encodage lorsque LANG = C en Python
Encodage de caractères lors du traitement de fichiers en Python 3
Comportement lorsque Container Trainable = False dans Keras
J'ai essayé le comportement d'E / S Eventlet non bloquant en Python