| name | use-counter-frequency |
| description | For counting and frequency: histograms, most common elements, vote tallying, neighbor counting, word frequencies, distribution analysis. |
use-counter-frequency
When to Use
- Counting occurrences of items
- Finding most common elements
- Building histograms
- Vote/tally counting
- Word frequency analysis
- Neighbor counting in grids
- Any "how many of each" question
When NOT to Use
- When you need the items themselves, not counts
- Single occurrence checking (use set)
- When counts need to be updated in complex ways
The Pattern
Use collections.Counter - a dict subclass optimized for counting.
from collections import Counter
Counter('abracadabra')
Counter([1, 1, 2, 3, 3, 3])
counter.most_common(3)
Counter('abc') + Counter('bcd')
sum(counter.values())
Example (from pytudes)
from collections import Counter
def words(text):
return re.findall(r'\w+', text.lower())
WORDS = Counter(words(open('big.txt').read()))
def P(word, N=sum(WORDS.values())):
"""Probability of word."""
return WORDS[word] / N
def neighbor_counts(world):
"""For each cell, count how many live neighbors it has."""
return Counter(neighbor
for cell in world
for neighbor in neighbors(cell))
counts = neighbor_counts(world)
new_world = {cell for cell, count in counts.items()
if count == 3 or (count == 2 and cell in world)}
class Dist(Counter):
"""A distribution of {outcome: frequency}."""
pass
DK = Dist(GG=121801, GB=126840, BG=127123, BB=)
Key Principles
- Counter is a dict: All dict methods work
- Missing keys = 0: No KeyError for missing items
- most_common(n): Get top n items efficiently
- Arithmetic works: Add, subtract, intersect counters
- Generator input:
Counter(x for x in iterable if condition)