J'ai résumé la nature de collections.Counter qui obtient le nombre d'éléments de iterable. Outre le comptage, il a d'autres propriétés utiles que dict n'a pas, je voudrais donc l'utiliser activement.
L'addition / soustraction et le calcul d'ensemble sont possibles. Les clés dont la valeur est inférieure ou égale à zéro sont automatiquement supprimées.
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})
Contrairement aux opérateurs, les clés avec des valeurs inférieures ou égales à zéro sont également conservées. ʻElements` renvoie uniquement les clés avec des valeurs positives.
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']
Si vous modifiez l'élément directement, la valeur inférieure à zéro est autorisée comme dans la méthode. Les références à des éléments inexistants renvoient 0 sans exception.
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
L'opérateur à terme unique est un raccourci pour les opérations sur le Counter ()
vide.
Seules les valeurs positives ou négatives peuvent être extraites après le calcul pour chaque élément.
A # Counter({'a': 3, 'b': -1})
+A # Counter({'a': 3})
-A # Counter({'b': 1})
Recommended Posts