Counter ist eine untergeordnete Klasse von Diktaten und kann hashbare Objekte zählen.
Zum Beispiel gibt es die folgenden Probleme:
Zählen Sie die Nummer jedes Elements im Array ['a', 'b', 'c', 'c', 'a', 'a'] und erhalten Sie das Ergebnis mit dict
So lösen Sie ohne Verwendung von 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)
#Ausgabe
# {'a': 3, 'c': 2, 'b': 1}
So lösen Sie mit Counter:
from collections import Counter
cnt = Counter(['a', 'b', 'c', 'c', 'a', 'a'])
print(cnt)
#Ausgabe
# Counter({'a': 3, 'c': 2, 'b': 1})
Der Zähler kann nicht nur aus einem Array, sondern auch aus dict und args initialisiert werden.
#Zähler mit Diktat initialisieren
a = Counter({'red': 4, 'blue': 2})
print(a)
#Ausgabe
# Counter({'red': 4, 'blue': 2})
#Zähler mit Argumenten initialisieren
b = Counter(cats=4, dogs=8)
print(b)
#Ausgabe
# Counter({'dogs': 8, 'cats': 4})
Die Methode zum Abrufen von Daten vom Zähler entspricht der von dict, und Sie können den Wert per Schlüssel abrufen. Der Unterschied besteht darin, dass beim Abrufen von Daten mit einem nicht vorhandenen Schlüssel der Zähler "0" zurückgibt, während "dict" zu "KeyError" führt.
a = Counter({'red': 4, 'blue': 2})
print(a['red'])
#Ausgabe
# 4
print(a['green'])
#Ausgabe
# 0
Der Rückgabewert von elements () ist ein Iterator. Es ist zu beachten, dass der Zähler nicht weniger als 1 ausgibt.
c = Counter(a=2, b=4, c=0, d=-2, e=1)
it = c.elements()
print(type(it))
#Ausgabe
# <class 'itertools.chain'>
print(list(it))
#Ausgabe
# ['a', 'a', 'b', 'b', 'b', 'b', 'e']
most_common (n) gibt eine Liste von Tupeln in der Form "(Element, Anzahl der Vorkommen)" zurück, die in der Reihenfolge der Anzahl der Vorkommen angeordnet ist. Wenn der Parameter "n" angegeben wird, werden "n" Elemente mit der höchsten Anzahl von Vorkommen ausgegeben, und wenn "n" nicht angegeben wird, werden alle Elemente ausgegeben.
c = Counter('abracadabra')
print(c.most_common(2))
#Ausgabe
# [('a', 5), ('b', 2)]
print(c.most_common())
#Ausgabe
# [('a', 5), ('b', 2), ('r', 2), ('c', 1), ('d', 1)]
subtrahieren (other_cnt) bedeutet, ein anderes Counter-Objekt vom Counter-Objekt zu subtrahieren.
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)
#Ausgabe
# Counter({'e': 10, 'a': 3, 'c': 3, 'b': 0, 'f': -3, 'd': -6})
update (other_cnt) bedeutet, dem Counter-Objekt ein weiteres Counter-Objekt hinzuzufügen.
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)
#Ausgabe
# Counter({'e': 10, 'a': 5, 'b': 4, 'f': 3, 'd': 2, 'c': -3})
Beispielsweise speichert gewöhnliches Tupel Schülerinformationen und gibt sie aus. Das Gericht hat keine andere Wahl, als den Wert nach Index zu ermitteln, wie unten gezeigt. Solche Quellen werden als schlecht lesbar empfunden.
#Student Tupel(Name, Alter, Geschlecht)
stu = ('Kimi', 15, 'male')
print(stu[0]) #Ausgabename
print(stu[1]) #Ausgabealter
print(stu[2]) #Geschlecht ausgeben
namedtuple kann benannte Tupel generieren. Sie können auf die Werte in Tupel-ähnlichen Attributen anstelle von Indizes zugreifen.
from collections import namedtuple
Student = namedtuple('Student', 'name, age, gender')
stu = Student('Kimi', 15, 'male')
print(stu.name) #Ausgabename
print(stu.age) #Ausgabealter
print(stu.gender) #Geschlecht ausgeben
_make () kann namedtuple aus iterierbaren Objekten wie list generieren.
from collections import namedtuple
data = ['Kimi', 15, 'male']
Student = namedtuple('Student', 'name, age, gender')
stu = Student._make(data)
print(stu)
#Ausgabe
# Student(name='Kimi', age=15, gender='male')
_asdict () gibt die Daten in namedtuple mit OrderDict zurück.
from collections import namedtuple
Student = namedtuple('Student', 'name, age, gender')
stu = Student('Kimi', 15, 'male')
stu_dict = stu._asdict()
print(stu_dict)
#Ausgabe
# OrderedDict([('name', 'Kimi'), ('age', 15), ('gender', 'male')])
print(stu_dict['name'])
#Ausgabe
# Kimi
_replace () ändert den Wert von namedtuple und gibt ihn als neues namedtuple-Objekt zurück. Beeinflusst das ursprüngliche Objekt nicht.
from collections import namedtuple
Student = namedtuple('Student', 'name, age, gender')
stu = Student('Kimi', 15, 'male')
new_stu = stu._replace(age=16)
print(new_stu)
#Ausgabe
# Student(name='Kimi', age=16, gender='male')
print(stu)
#Ausgabe
# Student(name='Kimi', age=15, gender='male')
_fields kann mit Tuple den Feldnamen namedtuple abrufen.
from collections import namedtuple
Student = namedtuple('Student', 'name, age, gender')
print(Student._fields)
#Ausgabe
# ('name', 'age', 'gender')
_Felder werden häufig verwendet, um neue benannte Tupel basierend auf vorhandenen benannten Tupeln zu erstellen. Ähnlich wie bei der Klasse "Vererbung".
from collections import namedtuple
Point2D = namedtuple('Point2D', 'x, y')
Point3D = namedtuple('Point3D', Point2D._fields + ('z',))
p = Point3D(30, 18, 90)
print(p)
#Ausgabe
# Point3D(x=30, y=18, z=90)
Wenn Sie beim Abrufen eines Werts aus einem normalen Diktat einen nicht vorhandenen Schlüssel verwenden, erhalten Sie einen KeyError.
my_dict = {'a': 1, 'b': 2}
print(my_dict['c'])
#Ausgabe
# KeyError: 'c'
defaultdict kann ein Diktat mit einem Standardwert erstellen. Gibt den Standardwert zurück, wenn mit einem nicht vorhandenen Schlüssel zugegriffen wird.
from collections import defaultdict
my_dict = defaultdict(lambda: 0, {'a': 1, 'b': 2})
print(my_dict['c'])
#Ausgabe
# 0
Recommended Posts