L'article a aujourd'hui introduit une bibliothèque très utile à Python - HePQ . La file d'attente complète de la file d'attente est la signification des files d'attente de pile. Ici HEAU est toutes des structures de données, dans l'article de cordes arrière, nous introduirons des détails. Aujourd'hui, il n'a introduit que l'utilisation de HEPQ. Si vous ne comprenez pas que vous ne comprenez pas les principes du tas et des files d'attente, nous n'aurons pas trop de profondeurs qui seront expliquées en détail dans l'article suivant.
Avant d'introduire l'utilisation, nous devons d'abord connaître la définition de la file d'attente prioritaire.
Queue Les personnes devraient avoir des structures de données simples et très élémentaires. Nous pouvons imaginer que tous les éléments de la file d'attente sont disposés en permanence et les éléments ne peuvent participer que dans la file d'attente du groupe et les facteurs ne peuvent que passer la file d'attente, Non peut échapper à la file d'attente de la file d'attente . Et la file d'attente prioritaire est de fournir à chaque élément de la file d'attente,Chaque priorité est placée, rendant les facteurs du groupe triché automatiquement en fonction du niveau de priorité , des niveaux de priorité élevés. C'est-à-dire que HeaPQ in Python est une maintenance hiérarchisée de la bibliothèque et nous pouvons facilement effectuer la fonction de la file d'attente prioritaire en l'appelant.
Tout d'abord, l'élément k maximum ou le plus petit
Considérez un vrai problème, supposons que nous ayons la mouillage à l'envers, mais nous ne nous soucions que du plus grand K ou les plus petits éléments k. Nous voulons dessiner cette partie de l'ensemble de la matrice, que dois-je faire?
Ce problème est très courant en fait et vous pouvez mentionner par exemple. Par exemple, les utilisateurs sont entrés dans les termes de recherche, nous avons trouvé beaucoup de contenu en fonction des mots de recherche d'utilisateur. Nous voulons filtrer plus susceptibles de cliquer sur les utilisateurs selon des algorithmes, le modèle du modèle peut fournir à chaque point prédictif pour chaque texte. Après cela, nous avons besoin depour sélectionner le point maximal
. Il y a encore beaucoup de scénarios similairesEn utilisant les interfaces les plus pratiques NLEGER et NSMALL de HePQ Curia.Prenez l'exemple:
Le SATEPQ's NlegesT et NSCALLES acceptent la plupart des deux paramètres, le premier paramètre est K, ce qui signifie que l'élément a de la quantité renvoyée, le deuxième paramètre est une matrice et des retours à l'écran. comme le premier K dans le tableau ou le premier est petit. Y a-t-il un problème ici, si l'élément de notre tableau est un objet plutôt qu'une valeur? Que dois-je faire? En fait, il est également très simple, vous savez que les camarades de classe ont été triés par des mots-clés Python personnalisés, comme triés, nous pouvons être effectués par
Fonction anonyme
.import heapqnums = [14, 20, 5, 28, 1, 21, 16, 22, 17, 28]heapq.nlargest(3, nums)# [28, 28, 22]heapq.nsmallest(3, nums)# [1, 5, 14]
Deuxièmement, fonctions anonymes
Nous savons tous qu'une fonction peut être déterminée par DEF dans Python. La fonction spécifiée par DEF a un nom de fonction, il est donc appelé Fonction dynamique
. En plus de la célèbre fonction, Python prend également en charge les fonctions anonymes. Comme le nom montre, il n'y a pas de repentanceg du nom de la fonction. En d'autres termes, tous les autres aspects sont comme des fonctions normales, mais n'ont aucun nom.
Les débutants peuvent être super, La fonction n'a aucun nom appelé ? Ce doute sera très normal, car il est utilisé pour programmer l'orientation du processus, ce qui ne suffit pas pour comprendre les objets orientés objet. Dans de nombreuses langues avancées,
Tout est l'objet une classe, une fonction, un intogy est un objet. Étant donné que la fonction est également un objet, la fonction peut être utilisée naturellement pour passer naturellement, non seulement peut être envoyée, qu'elle peut également être utilisée pour revenir. C'est le concept de programmation fonctionnelle et nous n'avons pas beaucoup de profondeur. Bien sûr, la fonctionnalité habituelle peut également être transmise et l'effet est identique. Seulement dans la programmation, certaines fonctions que nous n'utiliserons qu'une seule fois, n'ont pas besoin de séparer une fonction très pratique pour utiliser des fonctions anonymes. Par exemple: j'ai dit que j'ai une telle fonction:Cette fonction d'activité est reçue par deux paramètres, le premier paramètre est la seconde variable x paramètres est une fonction
. Il appellera le Func à l'intérieur de la fonction pour renvoyer le résultat de l'appel Func. Je dois faire une telle chose maintenant, j'espère qu'en fonction de cet entier au reste de 4, quel type de fonctionnement devrait être utilisé pour utiliser. Si le reste de 4 est 0, j'espère y demander un, si le reste est 2, j'espère demander des carrés, V.V. Si nous devons faire 4 méthodes selon des méthodes normales, passez-la. C'est bien sûr possible, mais c'est très gênant. Si vous utilisez des fonctions anonymes, vous pouvez simplifier un numéro de code
def operate(x, func): return func(x)
Dans le code ci-dessus, nous identifions la liste des fonctions cachées par le mot-clé
Lambda Pour éviter les cas où quatre fonctions sont envoyées. Bien sûr, ce problème a une écriture plus simple, vous pouvez le résoudre avec une fonction. Les étudiants intéressés peuvent y penser.
Voir la syntaxe des fonctions anonymes qui définissent d'abord Lambda, le mot clé Lambda, indique que nous sommes définis par des fonctions anonymes. Ensuite, gardez une trace des paramètres de cette fonction anonyme, nous utilisons uniquement une variable x, vous devez donc simplement avoir besoin d'écrire un x. Si nous devons utiliser plusieurs paramètres, soyez séparé par des virgules, bien sûr, vous pouvez également utiliser les paramètres. Après avoir écrit des paramètres, nous avons été séparés par un côlon et le côlon est écrit plus tard à la suite de retours.
Nous pouvons également spécifier une fonction anonyme pour une variable, puis nous pouvons appeler avec des fonctions normales:
def get_result(x): if x % 4 == 0: return operate(x, lambda x: x) elif x % 4 == 1: return operate(x, lambda x: x ** 2) elif x % 4 == 2: return operate(x, lambda x: x ** 3) else: return operate(x, lambda x: x ** 4)
Mardi arrange
square = lambda x: x ** 2print(square(3))print(operate(3, square))
Retour au contenu précédent, si nous voulons que HeaPQ organise un objet. Après cela, HeaPQ ne sait pas quels paramètres doivent être utilisés comme mesure standard, donc cette fois, nous avons besoin de nous
pour déterminer la fonction
Lorsque vous appelez NLAMMEST et NSMALLEST, nous en plus , une clé de paramètre
, nos fonctions anonymes, ses résultats sont renvoyés comme le prix de cet objet, c'est-à-dire que nous espérons que le tas sera organisé en fonction du prix de l'objet.Mercredi File d'attente, priorité
laptops = [ {'name': 'ThinkPad', 'amount': 100, 'price': 91.1}, {'name': 'Mac', 'amount': 50, 'price': 543.22}, {'name': 'Surface', 'amount': 200, 'price': 21.09}, {'name': 'Alienware', 'amount': 35, 'price': 31.75}, {'name': 'Lenovo', 'amount': 45, 'price': 16.35}, {'name': 'Huawei', 'amount': 75, 'price': 115.65}]cheap = heapq.nsmallest(3, portfolio, key=lambda s: s['price'])expensive = heapq.nlargest(3, portfolio, key=lambda s: s['price'])
HeaPQ permet également aux files d'attente prioritaires en dehors de l'interface numérique minimale minimale maximale. Nous pouvons directement appeler directement la méthode heapq.heapify directement, entrez une matrice, le résultat est renvoyé, en fonction de la pile créée dans ce tableau (équivalent à la file d'attente prioritaire). Bien sûr, nous pouvons également commencer dès le début et maintenir cette participation directement en appelant le heapq poussant et pop. Ensuite, nous avons déployé une file d'attente prioritaire de HePQ et le code est très simple. Je pense que les gens seront capables d'apprendre
Immédiatement
Ensuite, examinons le cas:
ici, Il a été plus introduit ici à propos de l'application ThePQ, mais pas de fin réel. Nous devons analyser la complexité de l'activité dans le HeaPQ, certaines parties que nous ignorons temporairement, voir Nscallest Nscallest le plus. J'ai trouvé cette bibliothèque à Github Source , dans l'approbation de la méthode, l'auteur a écrit la complexité. de cette méthode, et arrangée, utilise le premier K 15 : Nous savons que l'attente de la complexité de l'arrangement est, si vous comprenez la pile, vous allez Sachez que la complexité de l'élément d'insertion de prune est. Si nous déterminons la longueur du tas, nous ne pouvons contenir que k élément après que nous insérons n fois, donc chaque insert est inséré, total n Times, de sorte que la complexité globale est donc Si k petit, il peut être un peu plus petit que les chaussettesJe tape, mais le niveau est limité. Donc, il n'ya aucun moyen d'organiser et de filtrer le premier k ou le petit élément aussi possible que possible possible? Je vendrai une voiture à l'avance, puis L'article reviendra pour expliquer.