Ich habe die Art von collection.Counter zusammengefasst, die die Anzahl der Elemente von iterable ermittelt. Neben dem Zählen hat es andere nützliche Eigenschaften, die dikt nicht hat, deshalb möchte ich es aktiv nutzen.
Addition / Subtraktion und Mengenberechnung sind möglich. Schlüssel, deren Wert kleiner oder gleich Null ist, werden automatisch gelöscht.
from collections import Counter
A = Counter('ab') # Counter({'a': 1, 'b': 1})
B = Counter('bc') # Counter({'c': 1, 'b': 1})
A + B # Counter({'b': 2, 'a': 1, 'c': 1})
A - B # Counter({'a': 1})
A & B # Counter({'b': 1})
A | B # Counter({'a': 1, 'b': 1, 'c': 1})
Im Gegensatz zu Operatoren bleiben auch Schlüssel mit Werten kleiner oder gleich Null erhalten. elements
gibt nur Schlüssel mit positiven Werten zurück.
from collections import Counter
A = Counter('ab')
B = Counter('bc')
C = Counter('ac')
C.update(A) # Counter({'a': 2, 'c': 1, 'b': 1})
A.subtract(B) # Counter({'a': 1, 'b': 0, 'c': -1})
A.most_common() # [('a', 1), ('b', 0), ('c', -1)]
sorted(C.elements()) # ['a', 'a', 'b', 'c']
sorted(A.elements()) # ['a']
Wenn Sie das Element direkt ändern, ist der Wert unter Null wie in der Methode zulässig. Verweise auf nicht vorhandene Elemente geben ausnahmslos 0 zurück.
from collections import Counter
A = Counter('ab')
A['a'] += 2 # Counter({'a': 3, 'b': 1})
a['b'] -= 2 # Counter({'a': 3, 'b': -1})
A['c'] # 0
Beachten Sie, dass der Operator für einzelne Begriffe eine Verknüpfung für Operationen auf dem leeren "Counter ()" ist. Nach der Berechnung für jedes Element können nur positive oder negative Werte extrahiert werden.
A # Counter({'a': 3, 'b': -1})
+A # Counter({'a': 3})
-A # Counter({'b': 1})
Recommended Posts