← Все вопросы

Как посчитать количество вхождений элемента в список Python?

Задан 22 месяца назад496 просмотров2 ответа
8

Надо узнать, сколько раз конкретное значение встречается в списке. И ещё хотелось бы сразу посчитать, сколько раз встречается каждый элемент. Как посчитать количество вхождений в Python без ручного цикла со счётчиком?

2 ответа

13
✓ Принятый ответ — помог автору

Для одного значения есть готовый метод .count():

nums = [1, 2, 2, 3, 2]
print(nums.count(2))   # 3

Работает и для строк ('banana'.count('a') → 3), и для списков.

Если нужно посчитать сразу все элементы, не вызывайте .count() в цикле (это медленно, O(n²)). Возьмите Counter из модуля collections:

from collections import Counter

nums = [1, 2, 2, 3, 2, 1]
counts = Counter(nums)
print(counts)            # Counter({2: 3, 1: 2, 3: 1})
print(counts[2])         # 3
print(counts.most_common(2))  # [(2, 3), (1, 2)]

Counter — это словарь, где ключ это элемент, а значение это количество. most_common(n) сразу выдаёт топ-N самых частых.

Частая ошибка — для подсчёта всех элементов писать {x: nums.count(x) for x in nums}. Оно работает, но проходит список заново для каждого элемента и тормозит на больших данных. Counter делает то же за один проход.

Ещё плюс Counter: обращение к несуществующему ключу даёт 0, а не KeyError, так что проверять наличие не нужно.

5

Без импортов то же можно сделать через dict.get:

counts = {}
for x in nums:
    counts[x] = counts.get(x, 0) + 1

get(x, 0) возвращает текущий счётчик или 0, если ключа ещё нет — поэтому не падает на первом появлении. Это ровно то, что делает Counter под капотом. Удобно, когда не хочется тянуть collections, но Counter всё-таки короче и понятнее.

Ваш ответ

, чтобы ответить на вопрос.