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.
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).