Cinq types de données Python utiles faciles à oublier

La bibliothèque standard de Python est très puissante, mais il y a trop de bibliothèques à saisir, et il y a beaucoup de gens qui la connaissent mais oublient son existence et réinventent la roue. Au moins, je suis l'une de ces personnes, donc je vais vous présenter certains types de données inclus dans la bibliothèque Python standard qui sont utiles mais qui ne sont pas utilisés à moins que vous ne les connaissiez, comme mémo pour vous-même.

DefaultDict Document officiel: https://docs.python.jp/3/library/collections.html#collections.defaultdict

Littéralement, un type de dictionnaire qui vous permet de définir des valeurs par défaut. C'est pratique car vous n'avez pas à vérifier chaque clé du dictionnaire. Par exemple, lors du comptage du nombre d'occurrences d'un mot, il peut être utilisé sous la forme suivante:

>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> string = "python is way way way way better than java"
>>> for w in string.split(" "):
...     d[w] += 1
...
>>> d.items()
dict_items([('better', 1), ('than', 1), ('python', 1), ('java', 1), ('way', 4), ('is', 1)])

En passant, c'est difficile à comprendre à première vue, mais le constructeur defaultdict prend une fonction qui génère une valeur (pour être exact, un objet appelable) comme argument, pas comme valeur par défaut. Donc, si vous procédez comme suit, vous obtiendrez une erreur.

>>> from collections import defaultdict
>>> d = defaultdict(0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: first argument must be callable or None

Correctement,

>>> d = defaultdict(lambda: 0)

Ou

>>> d = defaultdict(int)

(Tout ce qui renvoie 0 lorsqu'il est appelé).

Counter Document officiel: https://docs.python.jp/3/library/collections.html#collections.Counter

Si vous voulez juste compter les mots, la classe Counter est extrêmement pratique. Si vous passez une liste, le nombre d'éléments sera compté, et si vous passez une chaîne de caractères, le nombre de caractères sera compté pour chaque élément / caractère.

>>> from collections import Counter
>>> c = Counter("python is way way way way better than C".split(" ")
>>> c
Counter({'way': 3, 'is': 1, 'better': 1, 'python': 1, 'C': 1, 'than': 1})
>>> c.most_common(1)
[('way', 3)]

C'est un processus que vous pourriez finir par implémenter vous-même, mais comme il existe un type de données si pratique, utilisons-le. Comme vous pouvez le voir, il est facile d'obtenir les valeurs les plus fréquentes et les n éléments les plus fréquents. Vous pouvez également ajouter ou soustraire entre les compteurs, de sorte que les compteurs sont également utiles lorsque vous souhaitez comparer des phrases.

deque Document officiel: https://docs.python.jp/3/library/collections.html#collections.deque

Étant donné que le type de liste intégré a déjà une méthode pop en python, il est facile de l'ignorer, mais vous pouvez extraire et supprimer des éléments ** avec ** O (1) depuis le début et la fin. Il existe un type de données appelé deque. À propos, le type de liste est une opération O (n) car la suppression des données depuis le début provoque le déplacement des éléments. De plus, deque prend un paramètre appelé maxlen au moment de l'initialisation, et dans ce cas, si vous essayez d'ajouter un élément plus grand que maxlen, il sera automatiquement supprimé du premier élément. La scène où deque entre en jeu est lorsque vous avez besoin d'une structure de données dont la longueur change de manière dynamique et dans les deux sens. Par exemple, lorsque vous souhaitez gérer un historique d'une longueur fixe.

>>> from collections import deque
>>> history = deque(maxlen=100)
>>> lines = open("python.txt")
>>> for line in lines:
...     if 'python' in line:
...         print(lines)
...     history.append(line)

Mieux encore, deque est ** thread safe **. Il peut également être utilisé comme moyen de partage de données dans des systèmes où les producteurs et les consommateurs sont dans plusieurs threads séparés.

PriorityQueue Document officiel: https://docs.python.jp/3/library/queue.html#queue.PriorityQueue

Je ne le savais pas jusqu'à récemment, mais Python implémente Priority Queue dans la bibliothèque standard. Je l'ai implémenté en utilisant heapq avant, mais vous n'aviez pas à le faire. PriorityQueue est utile lors de la mise en œuvre d'algorithmes de recherche. La recherche avec priorité à la largeur, la recherche avec priorité à la profondeur et la recherche A * peuvent également être considérées comme le même algorithme avec une priorité différente de PriorityQueue. À propos, Priority Queue est également thread-safe.

OrderedDict Document officiel: https://docs.python.jp/3/library/collections.html#collections.OrderedDict

Les éléments du dictionnaire Python sont fondamentalement dans le désordre. Par conséquent, lors de l'utilisation dynamique d'éléments, l'ordre dans lequel ils sont renvoyés lorsque les éléments du dictionnaire sont accédés de manière séquentielle est indéfini. De plus, essayer de trier les éléments d'un dictionnaire peut être un problème (ou plutôt, le dictionnaire lui-même ne peut pas être trié). OrderedDict facilite ces opérations. Par exemple, considérons une situation où les scores de test sont gérés dans un dictionnaire et les scores sont affichés dans différents ordres:

>>> from collections import OrderedDict
>>> d = OrderedDict({"Suzuki": 100, "Tanaka": 30, "Sato": 50})
>>> sorted(d.items(), key=lambda x: x[1])
[('Tanaka', 30), ('Sato', 50), ('Suzuki', 100)]
>>> sorted(d.items(), key=lambda x: x[0])
[('Sato', 50), ('Suzuki', 100), ('Tanaka', 30)]

Comme dans l'exemple ci-dessus, il est facile de trier par score ou par nom.

Résumé

Cette fois, je me suis concentré sur cinq types de données que je trouve particulièrement utiles, mais Python a une variété de bibliothèques standard utiles que je recommande de lire (je suis encore nouveau). Vous pouvez découvrir cela).

Recommended Posts

Cinq types de données Python utiles faciles à oublier
Notation d'inclusion de liste Python facile à oublier
Expressions régulières faciles et solides à apprendre en Python
10 erreurs Python communes aux débutants
Le type Enum, qui entre dans la bibliothèque standard de Python 3.4, est toujours utile
Résumé du livre électronique Python utile pour l'analyse de données gratuite
Syntaxe que les utilisateurs de Perl ont tendance à oublier en Python
Points faciles à commettre lors de l'utilisation de lambda pendant le traitement de la boucle Python
[Python] Il peut être utile de lister les trames de données
Les messages d'erreur Python sont spécifiques et faciles à comprendre "ga" (avant cela, deux points (:) et point-virgule (;))
Notes Python à oublier bientôt
[Python] Un moyen simple de visualiser les données énergétiques de manière interactive [plotly.express]
Un script python qui convertit les données Oracle Database en csv
La bibliothèque de visualisation de données "folium" de Python est très simple d'utilisation
Liens vers des personnes qui commencent tout juste l'analyse de données avec python
[Python] Comment FFT des données mp3
Bloc-notes Jupyter facile à utiliser (Python3.5)
Utile à retenir! 10 bibliothèques standard Python
Visualisez facilement vos données avec Python seaborn.
Python facile à apprendre en écrivant
[Tutoriel Python] Une introduction facile à Python
[Python] Utilisez des pandas pour extraire △△ qui maximise ○○
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.1-8.2.5)
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.3-8.3.6.1)
Convertir des données Excel en JSON avec python
Python 3.9 dict merge (`|`) semble être utile
[Introduction à Python3 Jour 19] Chapitre 8 Destinations de données (8.4-8.5)
Un moyen simple d'utiliser Wikipedia avec Python
[Introduction à Python3 Day 18] Chapitre 8 Destinations de données (8.3.6.2 à 8.3.6.3)
Livres recommandés par 3 types liés à Python
Convertir le type de date Python au format RFC822
Comment utiliser "deque" pour les données Python
Compressez les données python et écrivez sur sqlite
[Note] Termes difficiles à retenir
[Introduction au Data Scientist] Bases de Python ♬
[Python] Solution au problème que les éléments sont liés lors de la copie d'une liste
Les messages d'erreur Python sont spécifiques et faciles à comprendre "ga" (... AAA yyy BBB)