Essayez de trier vos propres objets avec des files d'attente prioritaires en Python

Environnement d'exécution

python 3.7.3

Chose que tu veux faire

Utilisez les files d'attente prioritaires à l'aide de python. Je veux l'appliquer un peu, comme trier mes propres objets.

Qu'est-ce qu'une file d'attente prioritaire?

Également appelée file d'attente prioritaire. La scène à utiliser est lorsque vous souhaitez trier pendant que le nombre d'éléments change. Ou lorsque vous souhaitez ajouter un élément à la liste tout en le gardant trié.

Étant donné que diverses autres personnes ont écrit des articles de référence, je vais omettre les détails. (https://qiita.com/ell/items/fe52a9eb9499b7060ed6)

Je veux trier mes propres objets.

Essayez de trier les objets de la classe Name qui ont deux attributs, first_name et last_name, selon diverses conditions.

Tout d'abord, générez la classe suivante comme base.


class Name(object):
    def __init__(self,first_name,last_name):
        self.first_name = first_name
        self.last_name = last_name
    
    def __lt__(self,other):
        return other.first_name > self.first_name
    
    def __repr__(self):
        return self.first_name + " " + self.last_name

Le cœur de cette période est une méthode spéciale appelée lt. Vous pouvez définir ce que signifie être plus petit que vous. (Il existe également de nombreuses autres méthodes spéciales. Veuillez les vérifier. https://blog.codecamp.jp/python-class-code)

Trions en fait en utilisant heapq.

from heapq import heapify,heappush,heappop
name1 = Name("james","smith")
name2 = Name("john","johnson")
name3 = Name("robert","williams")
name4 = Name("michael","brown")
name5 = Name("william","jones")
name6 = Name("david","brown")
name7 = Name("james","miller")
name8 = Name("david","davis")

name_list = [name1,name2,name3,name4,name5,name6,name7,name8]
heapify(name_list)
for i in range(len(name_list)):
    print(heappop(name_list))

Veuillez vous référer au document officiel pour plus de détails sur l'utilisation de heapq. → https://docs.python.org/ja/3/library/heapq.html

Cliquez ici pour les résultats d'exécution david brown david davis james miller james smith john johnson michael brown robert williams william jones

Puisque la méthode lt est définie pour juger la taille en fonction uniquement du prénom, vous pouvez voir que les prénoms sont classés par ordre croissant.

Essayez de postuler

Ensuite, comme pratique, essayez de trier d'abord par prénom, puis par nom dans la direction opposée. Le résultat attendu est:

david davis david brown james smith james miller john johnson michael brown robert williams william jones

Les prénoms sont classés par ordre croissant, mais les noms de famille sont classés par ordre décroissant. Voir le code ci-dessous pour un exemple d'implémentation de ceci.

class Name(object):
    def __init__(self,first_Name,last_Name):
        self.first_Name = first_Name
        self.last_Name = last_Name
    
    def __lt__(self,other):
        if other.first_Name == self.first_Name:
            return other.last_Name < self.last_Name
        else:
            return other.first_Name > self.first_Name
    
    def __repr__(self):
        return self.first_Name +" "+ self.last_Name


from heapq import heapify,heappush,heappop
name1 = Name("james","smith")
name2 = Name("john","johnson")
name3 = Name("robert","williams")
name4 = Name("michael","brown")
name5 = Name("william","jones")
name6 = Name("david","brown")
name7 = Name("james","miller")
name8 = Name("david","davis")

name_list = [name1,name2,name3,name4,name5,name6,name7,name8]
heapify(name_list)
for i in range(len(name_list)):
    print(heappop(name_list))

Merci d'avoir regardé jusqu'à la fin Si vous le souhaitez, s'il vous plaît LGTM (me semble bien) Si vous faites une erreur, veuillez la signaler.

Recommended Posts

Essayez de trier vos propres objets avec des files d'attente prioritaires en Python
Essayez d'améliorer votre propre quiz d'introduction avec Python
[Python] journalisation dans votre propre module
Livre Ali en python: Auto-implémentation de la file d'attente prioritaire
Essayez de vous connecter à qiita avec Python
Créez vos propres commandes Linux en Python
Utilisez facilement vos propres fonctions en Python
Publiez votre propre bibliothèque Python sur Homebrew
Essayez de fouiller votre journal avec Python
Obtenez votre propre adresse IP en Python
Essayez de créer votre propre AWS-SDK avec bash
Suivez les objets de votre vidéo avec OpenCV Tracker
Créez rapidement votre propre module avec setuptools (python)
Essayez de travailler avec Mongo en Python sur Mac
Importez vos propres modules avec le développement Python de Grasshopper
Essayez de gratter avec Python.
Tri de base en Python
Traitement des requêtes en Python
Essayez gRPC en Python
Essayez 9 tranches en Python
Flux de création de votre propre package avec setup.py avec python
Mémo pour créer votre propre Box avec le Python de Pepper
Créez votre propre Big Data en Python pour validation
Créez votre propre stéréogramme aléatoire (RDS) en Python.
Appelons votre propre bibliothèque C ++ avec Python (Préférences)
Essayez d'implémenter la mémoire associative par hop field network en Python
Essayez d'incorporer Python dans un programme C ++ avec pybind11
Utilisez CASA Toolkit dans votre propre environnement Python
Essayez de mettre des LED dans votre propre PC (légèrement)
[Road to Intermediate Python] Définissez dans votre propre classe
Essayez d'exécuter python dans l'environnement Django créé avec pipenv
Essayez de gratter les données COVID-19 Tokyo avec Python
Grattage au sélénium en Python
Exploitez LibreOffice avec Python
Grattage avec chromedriver en python
Jusqu'à ce que vous puissiez installer votre propre bibliothèque Python avec pip
Débogage avec pdb en Python
Essayez la sortie Python avec Haxe 3.2
Exécutez l'intelligence de votre propre bibliothèque python avec VScode.
Gérer les sons en Python
Tri des fichiers image avec Python (2)
Grattage avec du sélénium en Python
Tri des fichiers image avec Python (3)
Jugement d'équivalence d'objet en Python
Techniques de tri en Python
Essayez LINE Notify avec Python
Grattage avec Tor en Python
Tweet avec image en Python
Tri des fichiers image avec Python
Combiné avec ordinal en Python
Pile et file d'attente en Python
Essayez d'exécuter Python avec Try Jupyter
Implémentons Yuma dans Python 3
Reconnaissons les objets rouges avec python
Essayez la reconnaissance faciale avec Python
Créez votre propre classe de structure graphique et son dessin avec python