Jak liczyć wystąpienia na liście w Pythonie

Poznaj najlepsze sposoby zliczania wystąpień elementów na liście w języku Python. Porównaj metodę count(),collections.Counter i zliczanie słownikowe.

Wypróbuj to rozwiązanie w Edytorze

Przegląd

Analizowanie zbiorów danych często wymaga zliczenia wystąpień poszczególnych elementów. Na przykład policzenie, ile głosów otrzymał każdy kandydat, zliczenie częstotliwości słów w plikach tekstowych lub identyfikacja duplikatów w dziennikach transakcji. Python udostępnia kilka narzędzi do rozwiązania tego problemu, w zależności od tego, czy szukasz pojedynczej liczby elementów, czy pełnego zestawienia częstotliwości.

W celu sprawdzenia częstotliwości pojedynczego, określonego elementu, wbudowany typ listy udostępnia metodę `.count(value)`. Wykonuje iterację po liście i zwraca liczbę całkowitą określającą, ile razy pojawiła się ta dokładna wartość. Choć proste i czytelne, wywoływanie `.count()` w pętli w celu uzyskania zliczeń dla wszystkich elementów jest wysoce nieefektywne, ponieważ działa ze złożonością O(N^2).

Aby policzyć częstotliwości wszystkich elementów jednocześnie w jednym przebiegu, standardowa biblioteka oferuje klasę „Licznik” w module „kolekcje”. Przekazanie listy do „Licznika” zwraca obiekt przypominający słownik reprezentujący częstotliwości wszystkich elementów w czasie O(N). Udostępnia także metody pomocnicze, takie jak `most_common()`, umożliwiające szybkie pobieranie najważniejszych elementów.

Dane wyjściowe kodu i wykonania

Ten kod demonstruje zliczanie pojedynczych elementów na listach i uzyskiwanie całkowitej liczby elementów za pomocą kolekcji.Counter.

count_occurrences.py
Spróbuj w Edytorze
from collections import Counter

colors = ["red", "blue", "red", "green", "blue", "red"]

# Method 1: Count a single item using list.count()
red_count = colors.count("red")
print("Occurrences of 'red':", red_count)

# Method 2: Count all items using collections.Counter (Fast and powerful)
color_counts = Counter(colors)
print("\nCounter Object:", color_counts)
print("Count of 'blue':", color_counts["blue"])

# Getting the top most common items
print("Most common color:", color_counts.most_common(1))

# Method 3: Counting manually using a loop and a standard dictionary
manual_counts = {}
for item in colors:
    manual_counts[item] = manual_counts.get(item, 0) + 1
print("\nManual dict count:", manual_counts)
Wyjście terminala
Occurrences of 'red': 3

Counter Object: Counter({'red': 3, 'blue': 2, 'green': 1})
Count of 'blue': 2
Most common color: [('red', 3)]

Manual dict count: {'red': 3, 'blue': 2, 'green': 1}

Wdrażanie krok po kroku

  • Wywołaj list_variable.count(value), jeśli potrzebujesz tylko liczby jednego konkretnego elementu na liście.
  • Importuj kolekcje. Licz i przekazuj listę, aby policzyć wszystkie unikalne elementy w jednym zoptymalizowanym przebiegu.
  • Użyj metody .most_common(n) na obiekcie Counter, aby wyodrębnić n najczęściej występujących elementów.

Często zadawane pytania

Co się stanie, jeśli wyszukam brakujący klucz w obiekciecollections.Counter?

W przeciwieństwie do standardowego słownika, który zgłasza błąd KeyError, obiekt Counter zwraca 0 w przypadku brakujących elementów, co oznacza zero wystąpień.

Jaka jest złożoność czasowa Counter w porównaniu do liczenia w pętli za pomocą list.count()?

Licznik zlicza wszystkie elementy w czasie liniowym O(N), przechodząc przez listę raz. Iteracja po elementach listy i wywołanie metody list.count() zajmuje czas kwadratowy O(N^2), co jest niezwykle powolne w przypadku dużych list.

Powiązane tematy

Polecane zasoby Pythona

Poszerzaj swoją wiedzę dzięki powiązanym interaktywnym samouczkom, ściągawkom i porównaniom kodów.