Module de collections Python

  1. Counter

Counter est une classe enfant de dict et peut compter les objets hachables.

Par exemple, il existe les problèmes suivants:

Comptez le nombre de chaque élément dans le tableau ['a', 'b', 'c', 'c', 'a', 'a'] et obtenez le résultat avec dict

Comment résoudre sans utiliser Counter:

arr = ['a', 'b', 'c', 'c', 'a', 'a']

result_dict = {}
for item in arr:
    if item in result_dict:
        result_dict[item] = result_dict[item] + 1
    else:
        result_dict[item] = 1

print(result_dict)

#production
# {'a': 3, 'c': 2, 'b': 1}

Comment résoudre lors de l'utilisation de Counter:

from collections import Counter

cnt = Counter(['a', 'b', 'c', 'c', 'a', 'a'])
print(cnt)

#production
# Counter({'a': 3, 'c': 2, 'b': 1})

Le compteur peut être initialisé non seulement à partir d'un tableau, mais également à partir de dict et args.

#Initialiser le compteur avec dict
a = Counter({'red': 4, 'blue': 2})
print(a)
#production
# Counter({'red': 4, 'blue': 2})

#Initialiser le compteur avec des arguments
b = Counter(cats=4, dogs=8)
print(b)
#production
# Counter({'dogs': 8, 'cats': 4})

La méthode d'obtention des données de Counter est la même que celle de dict, et vous pouvez obtenir valeur par clé. La différence est que lors de l'extraction de données avec une clé qui n'existe pas, Counter renvoie "0", tandis que dict entraîne KeyError.

a = Counter({'red': 4, 'blue': 2})
print(a['red'])
#production
# 4

print(a['green'])
#production
# 0

1.1 Méthode - éléments ()

La valeur de retour de elements () est iterator. Il convient de noter que Counter ne produit pas moins de 1.

c = Counter(a=2, b=4, c=0, d=-2, e=1)
it = c.elements()
print(type(it))
#production
# <class 'itertools.chain'>

print(list(it))
#production
# ['a', 'a', 'b', 'b', 'b', 'b', 'e']

1.2 Méthode --most_common (n)

most_common (n) retourne une liste de tuples sous la forme (élément, nombre d'occurrences) classés par ordre de nombre d'occurrences. Lorsque le paramètre «n» est spécifié, les éléments «n» avec le plus grand nombre d'occurrences sont affichés, et lorsque «n» n'est pas spécifié, tous les éléments sont affichés.

c = Counter('abracadabra')
print(c.most_common(2))
#production
# [('a', 5), ('b', 2)]

print(c.most_common())
#production
# [('a', 5), ('b', 2), ('r', 2), ('c', 1), ('d', 1)]

1.3 Méthode --reduction (other_cnt)

soustraire (other_cnt) signifie soustraire un autre objet Counter de l'objet Counter.

c = Counter(a=4, b=2, c=0, d=-2, e=10)
d = Counter(a=1, b=2, c=-3, d=4, f=3)
c.subtract(d)
print(c)
#production
# Counter({'e': 10, 'a': 3, 'c': 3, 'b': 0, 'f': -3, 'd': -6})

1.4 Méthode --update (other_cnt)

update (other_cnt) signifie ajouter un autre objet Counter à l'objet Counter.

c = Counter(a=4, b=2, c=0, d=-2, e=10)
d = Counter(a=1, b=2, c=-3, d=4, f=3)
c.update(d)
print(c)
#production
# Counter({'e': 10, 'a': 5, 'b': 4, 'f': 3, 'd': 2, 'c': -3})
  1. namedtuple

Par exemple, Tuple ordinaire stocke et génère des informations sur les étudiants. Le tribunal n'a d'autre choix que d'obtenir la valeur par indice comme indiqué ci-dessous. Ces sources sont perçues comme mal lisibles.

#Tuple étudiant(Nom, âge, sexe)
stu = ('Kimi', 15, 'male')
print(stu[0])  #Nom de sortie
print(stu[1])  #Âge de sortie
print(stu[2])  #Genre de sortie

namedtuple peut générer des tuples nommés. Vous pouvez accéder aux valeurs dans Tuple comme des attributs au lieu d'index.

from collections import namedtuple

Student = namedtuple('Student', 'name, age, gender')
stu = Student('Kimi', 15, 'male')
print(stu.name)    #Nom de sortie
print(stu.age)     #Âge de sortie
print(stu.gender)  #Genre de sortie

2.1 Méthode --_ make ()

_make () peut générer un namedtuple à partir d'objets itérables tels que list.

from collections import namedtuple

data = ['Kimi', 15, 'male']
Student = namedtuple('Student', 'name, age, gender')
stu = Student._make(data)
print(stu)
#production
# Student(name='Kimi', age=15, gender='male')

2.2 Méthode --_ asdict ()

_asdict () renvoie les données dans namedtuple avec OrderDict.

from collections import namedtuple

Student = namedtuple('Student', 'name, age, gender')
stu = Student('Kimi', 15, 'male')
stu_dict = stu._asdict()
print(stu_dict)
#production
# OrderedDict([('name', 'Kimi'), ('age', 15), ('gender', 'male')])

print(stu_dict['name'])
#production
# Kimi

2.3 Méthode --_ replace ()

_replace () modifie la valeur de namedtuple et le renvoie en tant que nouvel objet namedtuple. N'affecte pas l'objet d'origine.

from collections import namedtuple

Student = namedtuple('Student', 'name, age, gender')
stu = Student('Kimi', 15, 'male')
new_stu = stu._replace(age=16)
print(new_stu)
#production
# Student(name='Kimi', age=16, gender='male')

print(stu)
#production
# Student(name='Kimi', age=15, gender='male')

2.4 Attribut --_ champs

_fields peut obtenir le nom de champ de namedtuple avec Tuple.

from collections import namedtuple

Student = namedtuple('Student', 'name, age, gender')
print(Student._fields)
#production
# ('name', 'age', 'gender')

Les _fields sont souvent utilisés pour créer de nouveaux namestuples basés sur des namedtuples existants. Similaire à la classe "héritage".

from collections import namedtuple

Point2D = namedtuple('Point2D', 'x, y')
Point3D = namedtuple('Point3D', Point2D._fields + ('z',))
p = Point3D(30, 18, 90)
print(p)
#production
# Point3D(x=30, y=18, z=90)
  1. defaultdict

Lors de la récupération d'une valeur à partir d'un dict normal, si vous utilisez une clé qui n'existe pas, vous obtiendrez une KeyError.

my_dict = {'a': 1, 'b': 2}
print(my_dict['c'])
#production
# KeyError: 'c'

defaultdict peut créer un dict avec une valeur par défaut. Renvoie la valeur par défaut en cas d'accès avec une clé qui n'existe pas.

from collections import defaultdict

my_dict = defaultdict(lambda: 0, {'a': 1, 'b': 2})
print(my_dict['c'])
#production
# 0

Recommended Posts

Module de collections Python
Importer le module Python
Module Python (mémo d'apprentissage Python ④)
Créer un module Python
importation du module d'origine python
Essayez d'utiliser le module de collections (ChainMap) de python3
Trier les importations de modules Python par ordre alphabétique
Fonctionnement de l'importation de modules Python
[Python] ModuleNotFoundError: aucun module nommé "urlparse"
Python
À propos du module Python venv
Mise à jour automatique du module Python
Python> dictionnaire / collections> defaultdict () / Counter ()
Ruby, Guide d'installation du module Python
Module de débogage et de test Python
[Python] journalisation dans votre propre module
Un bref résumé de la collection Python
Coopération entre le module python et l'API
Utilisez Blender comme module Python
Module de socket Python 3 et flux de communication de socket
Exécuter le module Python unittest dans vs2017
Module de vérification de mon numéro Python publié
Essayez d'utiliser le module Python Cmd
comparaison du module de conversion de fichier exécutable python 2
Recherche de l'emplacement du module python mercurial
Maîtriser le module lowref en Python
python kafka
Résumé Python
Python intégré
Notation d'inclusion Python
Technique Python
Étudier Python
Erreur python d'aujourd'hui: ModuleNotFoundError: aucun module nommé
Compte à rebours Python 2.7
Python FlowFishMaster
Service Python
astuces python
fonction python ①
Les bases de Python
Mémo Python
[Python] Comment afficher des nombres aléatoires (module aléatoire)
ufo-> python (3)
Notation d'inclusion Python
Installer python
python3 Comment installer un module externe
Erreur python d'aujourd'hui: ModuleNotFoundError: aucun module nommé
Passez le chemin du module python importé
Les bases de Python ④
Mémorandum Python 2
mémo python
Module d'implémentation de file d'attente et Python "deque"
Python Jinja2
Comparaison des modules de conversion japonais en Python3
Incrément Python
atCoder 173 Python
[Python] fonction
Installation de Python
Installer Python 3.4.3.
Créer un module Python [CarSensor API support module csapi]