python 3.7.3
Utilisez les files d'attente prioritaires à l'aide de python. Je veux l'appliquer un peu, comme trier mes propres objets.
É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)
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.
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