Maison > développement back-end > Tutoriel Python > Introduction aux collections de modules intégrés Python

Introduction aux collections de modules intégrés Python

angryTom
Libérer: 2019-11-30 15:45:21
avant
4783 Les gens l'ont consulté

Introduction aux collections de modules intégrés Python

Introduction aux collections de modules intégrés de Python

Collections est un module de collection intégré à Python qui fournit de nombreuses fonctions utiles Classe Collection.

1.namedtuple

Python fournit de nombreux types de base très utiles, tels que le tuple de type immuable, que nous pouvons facilement utiliser pour représenter un vecteur binaire.

Apprentissage recommandé : Tutoriel vidéo Python

>>> v = (2,3)
Copier après la connexion

Nous avons constaté que bien que (2,3) représente deux coordonnées d'un vecteur, s'il n'y a pas d'explication supplémentaire, et il Il est difficile de voir directement que ce tuple est utilisé pour représenter une coordonnée.

Définir une classe pour cela est un gros problème à l'heure actuelle, nommé tuple est pratique.

>>> from collections import namedtuple
>>> Vector = namedtuple('Vector', ['x', 'y'])
>>> v = Vector(2,3)
>>> v.x
2
>>> v.y
3
Copier après la connexion

namedtuple est une fonction qui crée un objet tuple personnalisé et spécifie le nombre d'éléments du tuple, et peut utiliser des attributs au lieu d'index pour référencer un élément du tuple.

De cette façon, nous pouvons utiliser Nametuple pour définir facilement un type de données. Il a l'invariance d'un tuple et peut être référencé en fonction d'attributs.

Nous pouvons vérifier le type de l'objet Vector créé.

>>> type(v)
<class &#39;__main__.Vector&#39;>
>>> isinstance(v, Vector)
True
>>> isinstance(v, tuple)
True
Copier après la connexion

De même, si vous souhaitez utiliser des coordonnées et un rayon pour représenter un cercle, vous pouvez également utiliser la définition du tuple nommé :

>>> Circle = namedtuple(&#39;Circle&#39;, [&#39;x&#39;, &#39;y&#39;, &#39;r&#39;])
# namedtuple(&#39;名称&#39;, [‘属性列表’])
Copier après la connexion

2, deque

dans les données Dans la structure, nous savons que la file d'attente et la pile sont deux types de données très importants, l'un est premier entré, premier sorti et l'autre est dernier entré, premier sorti. En python, lorsque vous utilisez une liste pour stocker des données, l'accès aux éléments par index est très rapide, mais l'insertion et la suppression d'éléments sont très lentes, car la liste est un stockage linéaire, et lorsque la quantité de données est importante, l'efficacité d'insertion et de suppression est très faible.

Deque est une structure de liste doublement chaînée pour une implémentation efficace des opérations d'insertion et de suppression. Elle est très adaptée à l'implémentation de structures de données telles que des files d'attente et des piles. En plus d'implémenter append() et pop() de list,

>>> from collections import deque
>>> deq = deque([1, 2, 3])
>>> deq.append(4)
>>> deq
deque([1, 2, 3, 4])
>>> deq.appendleft(5)
>>> deq
deque([5, 1, 2, 3, 4])
>>> deq.pop()
4
>>> deq.popleft()
5
>>> deq
deque([1, 2, 3])
Copier après la connexion

deque prend également en charge appendleft() et popleft(), afin que vous puissiez ajouter ou supprimer des éléments dans l'en-tête de manière très efficace.

3. defaultdict

Lors de l'utilisation du type de dictionnaire dict, si la clé référencée n'existe pas, KeyError sera levée. Si vous souhaitez qu'une valeur par défaut soit renvoyée lorsque la clé n'existe pas, vous pouvez utiliser defaultdict.

>>> from collections import defaultdict
>>> dd = defaultdict(lambda: &#39;defaultvalue&#39;)
>>> dd[&#39;key1&#39;] = &#39;a&#39;
>>> dd[&#39;key1&#39;]
&#39;a&#39;
>>> dd[&#39;key2&#39;] # key2未定义,返回默认值
&#39;defaultvalue&#39;
Copier après la connexion

Notez que la valeur par défaut est renvoyée en appelant la fonction et que la fonction est transmise lors de la création de l'objet defaultdict.

À l'exception du renvoi de la valeur par défaut lorsque la clé n'existe pas, les autres comportements de defaultdict sont exactement les mêmes que ceux de dict.

4. OrderedDict

Lors de l'utilisation de dict, les touches ne sont pas ordonnées. Lors d'une itération sur dict, nous ne pouvons pas déterminer l'ordre des clés.

Mais si vous souhaitez conserver l'ordre des clés, vous pouvez utiliser OrderedDict.

>>> from collections import OrderedDict
>>> d = dict([(&#39;a&#39;, 1), (&#39;b&#39;, 2), (&#39;c&#39;, 3)])
>>> d # dict的Key是无序的
{&#39;a&#39;: 1, &#39;c&#39;: 3, &#39;b&#39;: 2}
>>> od = OrderedDict([(&#39;a&#39;, 1), (&#39;b&#39;, 2), (&#39;c&#39;, 3)])
>>> od # OrderedDict的Key是有序的
OrderedDict([(&#39;a&#39;, 1), (&#39;b&#39;, 2), (&#39;c&#39;, 3)])
Copier après la connexion

Notez que les clés de OrderedDict seront disposées dans l'ordre d'insertion, pas la clé elle-même

>>> od = OrderedDict()
>>> od[&#39;z&#39;] = 1
>>> od[&#39;y&#39;] = 2
>>> od[&#39;x&#39;] = 3
>>> list(od.keys()) # 按照插入的Key的顺序返回
[&#39;z&#39;, &#39;y&#39;, &#39;x&#39;]
Copier après la connexion

OrderedDict peut implémenter un dict FIFO (premier entré, premier sorti). La capacité dépasse la limite, supprimez d'abord la clé ajoutée la plus ancienne.

from collections import OrderedDict
class LastUpdatedOrderedDict(OrderedDict):
    def __init__(self, capacity):
        super(LastUpdatedOrderedDict, self).__init__()
        self._capacity = capacity
    def __setitem__(self, key, value):
        containsKey = 1 if key in self else 0
        if len(self) - containsKey >= self._capacity:
            last = self.popitem(last=False)
            print(&#39;remove:&#39;, last)
        if containsKey:
            del self[key]
            print(&#39;set:&#39;, (key, value))
        else:
            print(&#39;add:&#39;, (key, value))
        OrderedDict.__setitem__(self, key, value)
Copier après la connexion

5. ChainMap

ChainMap peut enchaîner un ensemble de dicts pour former un dict logique. ChainMap lui-même est également un dict, mais lors de la recherche, il recherchera les dicts internes dans l'ordre.

Quel est le meilleur moment pour utiliser ChainMap ? Par exemple : les applications doivent souvent transmettre des paramètres. Les paramètres peuvent être transmis via la ligne de commande, via des variables d'environnement et peuvent également avoir des paramètres par défaut. Nous pouvons utiliser ChainMap pour implémenter la recherche de priorité des paramètres, c'est-à-dire vérifier d'abord les paramètres de ligne de commande, s'ils ne sont pas transmis, puis vérifier les variables d'environnement, sinon utiliser les paramètres par défaut.

Le code suivant montre comment trouver les deux paramètres user et color.

from collections import ChainMap
import os, argparse
# 构造缺省参数:
defaults = {
    &#39;color&#39;: &#39;red&#39;,
    &#39;user&#39;: &#39;guest&#39;
}
# 构造命令行参数:
parser = argparse.ArgumentParser()
parser.add_argument(&#39;-u&#39;, &#39;--user&#39;)
parser.add_argument(&#39;-c&#39;, &#39;--color&#39;)
namespace = parser.parse_args()
command_line_args = { k: v for k, v in vars(namespace).items() if v }
# 组合成ChainMap:
combined = ChainMap(command_line_args, os.environ, defaults)
# 打印参数:
print(&#39;color=%s&#39; % combined[&#39;color&#39;])
print(&#39;user=%s&#39; % combined[&#39;user&#39;])
Copier après la connexion

Lorsqu'il n'y a pas de paramètres, imprimez les paramètres par défaut :

$ python3 use_chainmap.py 
color=red
user=guest
Copier après la connexion

Lorsque les paramètres de ligne de commande sont transmis, les paramètres de ligne de commande sont utilisés en premier :

$ python3 use_chainmap.py -u bob
color=red
user=bob
Copier après la connexion

En même temps, la ligne de commande est passée dans Paramètres et variables d'environnement, les paramètres de ligne de commande ont une priorité plus élevée :

$ user=admin color=green python3 use_chainmap.py -u bob
color=green
user=bob
Copier après la connexion

Compteur

Le compteur est un simple compteur. , par exemple, compter le nombre d'occurrences de caractères. Count:

from collections import Counter
>>> s = &#39;abbcccdddd&#39;
>>> Counter(s)
Counter({&#39;d&#39;: 4, &#39;c&#39;: 3, &#39;b&#39;: 2, &#39;a&#39;: 1})
Copier après la connexion

Counter est en fait une sous-classe de dict.

7. Résumé

Le module de collections fournit des classes de collection utiles, qui peuvent être sélectionnées selon les besoins.


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal