Maison développement back-end Tutoriel Python Tutoriel d'utilisation des collections de bibliothèques standard Python

Tutoriel d'utilisation des collections de bibliothèques standard Python

Feb 04, 2017 pm 04:49 PM

Introduction

Python nous fournit 4 structures de données de base : liste, tuple, dict, défini, mais lorsqu'il s'agit de grandes quantités de données, ces quatre structures de données sont évidemment trop simples. Par exemple, l'efficacité d'insertion d'une liste en tant que liste chaînée unidirectionnelle sera relativement faible dans certaines situations. Un dicté ordonné. Nous devons donc actuellement utiliser le package collections fourni par la bibliothèque standard Python. Il fournit plusieurs classes de collection utiles. La maîtrise de ces classes de collection nous permettra non seulement de rendre le code que nous écrivons plus pythonique, mais également d'améliorer son efficacité. nos programmes fonctionnent.

Utilisation de defaultdict

defaultdict (default_factory) ajoute default_factory au-dessus du dict ordinaire (dictionnaire), de sorte que la clé (clé) correspondante soit automatiquement générée lorsque il n'existe pas Type de valeur (valeur), le paramètre default_factory peut être spécifié sous forme de liste, Set, int et autres types légaux.

exemple1

>>> from collections import defaultdict
>>> s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]
Copier après la connexion

Nous avons maintenant un ensemble de listes (listes) comme celle ci-dessus Bien que nous ayons 6 ensembles de données, après une observation attentive, nous. n'ont en réalité que deux ensembles de données. Il existe plusieurs couleurs, mais chaque couleur correspond à plusieurs valeurs. Nous voulons maintenant convertir cette liste en un dict (dictionnaire). La clé (clé) de ce dict correspond à une couleur, et la valeur (valeur) du dict est définie dans une liste pour stocker plusieurs valeurs correspondantes. à la couleur. Nous pouvons utiliser defaultdict(list) pour résoudre ce problème.

# 
d可以看作一个dict(字典),dict的value是一个list(列表)
>>> d = defaultdict(list)
>>> for k, v in s:
...     d[k].append(v)
...
>>> d
defaultdict(<class &#39;list&#39;>, {&#39;blue&#39;: [2, 4, 4], &#39;red&#39;: [1, 3, 1]})
Copier après la connexion

exemple2

Il y a quelques imperfections dans l'exemple ci-dessus, telles que {'bleu' : [2, 4, 4], 'rouge' : [1, 3, 1]} Dans ce defaultdict, la couleur bleue contient deux 4 et la couleur rouge contient deux 1. Cependant, nous ne voulons pas contenir d'éléments en double. Pour le moment, nous pouvons envisager d'utiliser defaultdict(set) pour résoudre ce problème. La différence entre set (collection) et list (list) est que les mêmes éléments ne sont pas autorisés à exister dans set.

>>> d = defaultdict(set)
>>> for k, v in s:
...     d[k].add(v)
...
>>> d
defaultdict(<class &#39;set&#39;>, {&#39;blue&#39;: {2, 4}, &#39;red&#39;: {1, 3}})
Copier après la connexion

exemple3

>>> s = 
&#39;hello world&#39;
Copier après la connexion

En utilisant le formulaire defaultdict(int) nous comptons le nombre d'occurrences de chaque caractère dans une chaîne.

>>> d = defaultdict(int)
>>> for k in s:
...     d[k] += 1
...
>>> d
defaultdict(<class &#39;int&#39;>, {&#39;o&#39;: 2, &#39;h&#39;: 1, &#39;w&#39;: 1, &#39;l&#39;: 3, &#39; &#39;: 1, &#39;d&#39;: 1, &#39;e&#39;: 1, &#39;r&#39;: 1})
Copier après la connexion

Utilisation de OrderedDict

Nous savons que le dict par défaut (dictionnaire) n'est pas ordonné, mais dans certains cas, nous devons conserver l'ordre du dict , pour le moment, vous pouvez utiliser OrderedDict, qui est une sous-classe de dict, mais conserve le type ordonné de dict sur la base de dict. Voyons comment l'utiliser.

exemple1

>>> from collections import OrderedDict
# 
无序的dict
>>> d = {&#39;banana&#39;: 3, &#39;apple&#39;: 4, &#39;pear&#39;: 1, &#39;orange&#39;: 2}
Copier après la connexion

Il s'agit d'un dict (dictionnaire) non ordonné. Nous pouvons maintenant utiliser OrderedDict pour ordonner ce dict.

# 
将d按照key来排序
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([(&#39;apple&#39;, 4), (&#39;banana&#39;, 3), (&#39;orange&#39;, 2), (&#39;pear&#39;, 1)])
# 
将d按照value来排序
>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([(&#39;pear&#39;, 1), (&#39;orange&#39;, 2), (&#39;banana&#39;, 3), (&#39;apple&#39;, 4)])
# 
将d按照key的长度来排序
>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
OrderedDict([(&#39;pear&#39;, 1), (&#39;apple&#39;, 4), (&#39;orange&#39;, 2), (&#39;banana&#39;, 3)])
Copier après la connexion

exemple2

L'utilisation de la méthode popitem(last=True) nous permet de supprimer les clés du dict dans LIFO (premier entré, dernier out) order -value, c'est-à-dire supprimer la dernière paire clé-valeur insérée. Si last=False, supprimez la valeur-clé dans le dict selon FIFO (premier entré, premier sorti).

>>> d = {&#39;banana&#39;: 3, &#39;apple&#39;: 4, &#39;pear&#39;: 1, &#39;orange&#39;: 2}
# 
将d按照key来排序
>>> d = OrderedDict(sorted(d.items(), key=lambda t: t[0]))
>>> d
OrderedDict([(&#39;apple&#39;, 4), (&#39;banana&#39;, 3), (&#39;orange&#39;, 2), (&#39;pear&#39;, 1)])
# 
使用popitem()方法来移除最后一个key-value对
>>> d.popitem()
(&#39;pear&#39;, 1)
# 
使用popitem(last=False)来移除第一个key-value对
>>> d.popitem(last=False)
(&#39;apple&#39;, 4)
Copier après la connexion

exemple3

Utilisez move_to_end(key, last=True) pour modifier l'ordre clé-valeur de l'objet OrderedDict ordonné. Grâce à cette méthode, nous pouvons insérer n'importe quelle valeur-clé dans l'objet OrderedDict ordonné au début ou à la fin du dictionnaire.

>>> d = OrderedDict.fromkeys(&#39;abcde&#39;)
>>> d
OrderedDict([(&#39;a&#39;, None), (&#39;b&#39;, None), (&#39;c&#39;, None), (&#39;d&#39;, None), (&#39;e&#39;, None)])
# 
将key为b的key-value对移动到dict的最后
>>> d.move_to_end(&#39;b&#39;)
>>> d
OrderedDict([(&#39;a&#39;, None), (&#39;c&#39;, None), (&#39;d&#39;, None), (&#39;e&#39;, None), (&#39;b&#39;, None)])
>>> &#39;&#39;.join(d.keys())
&#39;acdeb&#39;
# 
将key为b的key-value对移动到dict的最前面
>>> d.move_to_end(&#39;b&#39;, last=False)
>>> &#39;&#39;.join(d.keys())
&#39;bacde&#39;
Copier après la connexion

Utilisation de deque

L'avantage du stockage de données par liste est que la recherche d'éléments par index sera rapide, mais l'insertion et la suppression d'éléments sont très lent Oui, car il s’agit d’une structure de données de liste à chaînage unique. Deque est une liste bidirectionnelle pour une implémentation efficace des opérations d'insertion et de suppression. Elle convient aux files d'attente et aux piles et est thread-safe.

List fournit uniquement les méthodes append et pop pour insérer/supprimer des éléments à la fin de la liste, mais deque ajoute appendleft/popleft pour nous permettre d'insérer/supprimer efficacement des éléments au début de l'élément. De plus, la complexité de l'algorithme d'utilisation de deque pour ajouter (ajouter) ou afficher (pop) des éléments aux deux extrémités de la file d'attente est d'environ O (1), mais pour l'opération de l'objet liste visant à modifier la longueur de la liste et la position des données, par exemple exemple La complexité des opérations pop(0) et insert(0, v) est aussi élevée que O(n). Puisque le fonctionnement de deque est fondamentalement le même que celui de list, il ne sera pas répété ici.

Utilisation de ChainMap

ChainMap est utilisé pour combiner plusieurs dicts (dictionnaires) dans une liste (juste une métaphore), qui peut être comprise comme la fusion de plusieurs dictionnaires Mais c’est différent de la mise à jour et plus efficace.

>>> from collections import ChainMap
>>> a = {&#39;a&#39;: &#39;A&#39;, &#39;c&#39;: &#39;C&#39;}
>>> b = {&#39;b&#39;: &#39;B&#39;, &#39;c&#39;: &#39;D&#39;}
>>> m = ChainMap(a, b)
# 
构造一个ChainMap对象
>>> m
ChainMap({&#39;a&#39;: &#39;A&#39;, &#39;c&#39;: &#39;C&#39;}, {&#39;b&#39;: &#39;B&#39;, &#39;c&#39;: &#39;D&#39;})
>>> m[&#39;a&#39;]
&#39;A&#39;
>>> m[&#39;b&#39;]
&#39;B&#39;
# 
将m变成一个list
>>> m.maps
[{&#39;a&#39;: &#39;A&#39;, &#39;c&#39;: &#39;C&#39;}, {&#39;b&#39;: &#39;B&#39;, &#39;c&#39;: &#39;D&#39;}]

# 
更新a中的值也会对ChainMap对象造成影响
>>> a[&#39;c&#39;] = &#39;E&#39;
>>> m[&#39;c&#39;]
&#39;E&#39;
# 
从m复制一个ChainMap对象,更新这个复制的对象并不会对m造成影响
>>> m2 = m.new_child()
>>> m2[&#39;c&#39;] = &#39;f&#39;
>>> m[&#39;c&#39;]
&#39;E&#39;
>>> a[&#39;c&#39;]
&#39;E&#39;
>>> m2.parents
ChainMap({&#39;a&#39;: &#39;A&#39;, &#39;c&#39;: &#39;C&#39;}, {&#39;b&#39;: &#39;B&#39;, &#39;c&#39;: &#39;D&#39;})
Copier après la connexion

Utilisation de Counter

exemple1

Counter est également une sous-classe de dict . Il s'agit d'un conteneur non ordonné et peut être considéré comme un compteur, utilisé pour compter le nombre d'éléments liés.

>>> from collections import Counter
>>> cnt = Counter()
# 
统计列表中元素出现的个数
>>> for word in [&#39;red&#39;, &#39;blue&#39;, &#39;red&#39;, &#39;green&#39;, &#39;blue&#39;, &#39;blue&#39;]:
...  cnt[word] += 1
...
>>> cnt
Counter({&#39;blue&#39;: 3, &#39;red&#39;: 2, &#39;green&#39;: 1})
# 
统计字符串中元素出现的个数
>>> cnt = Counter()
>>> for ch in &#39;hello&#39;:
...     cnt[ch] = cnt[ch] + 1
...
>>> cnt
Counter({&#39;l&#39;: 2, &#39;o&#39;: 1, &#39;h&#39;: 1, &#39;e&#39;: 1})
Copier après la connexion

exemple2

Utilisez la méthode elements() pour renvoyer un itérateur (itérateur) en fonction du nombre d'occurrences des éléments. Les éléments sont renvoyés dans. n'importe quel ordre. Si les éléments Si le nombre est inférieur à 1, il sera ignoré.

>>> c = Counter(a=4, b=2, c=0, d=-2)
>>> c
Counter({&#39;a&#39;: 4, &#39;b&#39;: 2, &#39;c&#39;: 0, &#39;d&#39;: -2})
>>> c.elements()
<itertools.chain object at 0x7fb0a069ccf8>
>>> next(c)
&#39;a&#39;
# 
排序
>>> sorted(c.elements())
[&#39;a&#39;, &#39;a&#39;, &#39;a&#39;, &#39;a&#39;, &#39;b&#39;, &#39;b&#39;]
Copier après la connexion

Utilisez most_common(n) pour renvoyer une liste contenant les n premiers éléments qui apparaissent dans l'objet Counter.

>>> c = Counter(&#39;abracadabra&#39;)
>>> c
Counter({&#39;a&#39;: 5, &#39;b&#39;: 2, &#39;r&#39;: 2, &#39;d&#39;: 1, &#39;c&#39;: 1})
>>> c.most_common(3)
[(&#39;a&#39;, 5), (&#39;b&#39;, 2), (&#39;r&#39;, 2)]
Copier après la connexion

Utilisation du tuple nommé

Utilisez le tuple nommé(typename, field_names) pour nommer les éléments du tuple afin de rendre le programme plus lisible.

>>> from collections import namedtuple
>>> Point = namedtuple(&#39;PointExtension&#39;, [&#39;x&#39;, &#39;y&#39;])
>>> p = Point(1, 2)
>>> p.__class__.__name__
&#39;PointExtension&#39;
>>> p.x
1
>>> p.y
2
Copier après la connexion

Ce qui précède est le contenu du didacticiel d'utilisation des collections de la bibliothèque standard Python. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP et Python: différents paradigmes expliqués PHP et Python: différents paradigmes expliqués Apr 18, 2025 am 12:26 AM

PHP est principalement la programmation procédurale, mais prend également en charge la programmation orientée objet (POO); Python prend en charge une variété de paradigmes, y compris la POO, la programmation fonctionnelle et procédurale. PHP convient au développement Web, et Python convient à une variété d'applications telles que l'analyse des données et l'apprentissage automatique.

Choisir entre PHP et Python: un guide Choisir entre PHP et Python: un guide Apr 18, 2025 am 12:24 AM

PHP convient au développement Web et au prototypage rapide, et Python convient à la science des données et à l'apprentissage automatique. 1.Php est utilisé pour le développement Web dynamique, avec une syntaxe simple et adapté pour un développement rapide. 2. Python a une syntaxe concise, convient à plusieurs champs et a un écosystème de bibliothèque solide.

Peut-on exécuter le code sous Windows 8 Peut-on exécuter le code sous Windows 8 Apr 15, 2025 pm 07:24 PM

VS Code peut fonctionner sur Windows 8, mais l'expérience peut ne pas être excellente. Assurez-vous d'abord que le système a été mis à jour sur le dernier correctif, puis téléchargez le package d'installation VS Code qui correspond à l'architecture du système et l'installez comme invité. Après l'installation, sachez que certaines extensions peuvent être incompatibles avec Windows 8 et doivent rechercher des extensions alternatives ou utiliser de nouveaux systèmes Windows dans une machine virtuelle. Installez les extensions nécessaires pour vérifier si elles fonctionnent correctement. Bien que le code VS soit possible sur Windows 8, il est recommandé de passer à un système Windows plus récent pour une meilleure expérience de développement et une meilleure sécurité.

L'extension VScode est-elle malveillante? L'extension VScode est-elle malveillante? Apr 15, 2025 pm 07:57 PM

Les extensions de code vs posent des risques malveillants, tels que la cachette de code malveillant, l'exploitation des vulnérabilités et la masturbation comme des extensions légitimes. Les méthodes pour identifier les extensions malveillantes comprennent: la vérification des éditeurs, la lecture des commentaires, la vérification du code et l'installation avec prudence. Les mesures de sécurité comprennent également: la sensibilisation à la sécurité, les bonnes habitudes, les mises à jour régulières et les logiciels antivirus.

Comment exécuter des programmes dans Terminal Vscode Comment exécuter des programmes dans Terminal Vscode Apr 15, 2025 pm 06:42 PM

Dans VS Code, vous pouvez exécuter le programme dans le terminal via les étapes suivantes: Préparez le code et ouvrez le terminal intégré pour vous assurer que le répertoire de code est cohérent avec le répertoire de travail du terminal. Sélectionnez la commande Run en fonction du langage de programmation (tel que Python de Python your_file_name.py) pour vérifier s'il s'exécute avec succès et résoudre les erreurs. Utilisez le débogueur pour améliorer l'efficacité du débogage.

Le code Visual Studio peut-il être utilisé dans Python Le code Visual Studio peut-il être utilisé dans Python Apr 15, 2025 pm 08:18 PM

VS Code peut être utilisé pour écrire Python et fournit de nombreuses fonctionnalités qui en font un outil idéal pour développer des applications Python. Il permet aux utilisateurs de: installer des extensions Python pour obtenir des fonctions telles que la réalisation du code, la mise en évidence de la syntaxe et le débogage. Utilisez le débogueur pour suivre le code étape par étape, trouver et corriger les erreurs. Intégrez Git pour le contrôle de version. Utilisez des outils de mise en forme de code pour maintenir la cohérence du code. Utilisez l'outil de liaison pour repérer les problèmes potentiels à l'avance.

Peut-on utiliser pour mac Peut-on utiliser pour mac Apr 15, 2025 pm 07:36 PM

VS Code est disponible sur Mac. Il a des extensions puissantes, l'intégration GIT, le terminal et le débogueur, et offre également une multitude d'options de configuration. Cependant, pour des projets particulièrement importants ou un développement hautement professionnel, le code vs peut avoir des performances ou des limitations fonctionnelles.

Python vs JavaScript: la courbe d'apprentissage et la facilité d'utilisation Python vs JavaScript: la courbe d'apprentissage et la facilité d'utilisation Apr 16, 2025 am 12:12 AM

Python convient plus aux débutants, avec une courbe d'apprentissage en douceur et une syntaxe concise; JavaScript convient au développement frontal, avec une courbe d'apprentissage abrupte et une syntaxe flexible. 1. La syntaxe Python est intuitive et adaptée à la science des données et au développement back-end. 2. JavaScript est flexible et largement utilisé dans la programmation frontale et côté serveur.

See all articles