Подсчет повторяющихся значений в списке: метод count и его аналоги

Раздел: Основы Python -> Методы списков

Метод count для списков Python

Метод list.count(x) возвращает целое число – количество вхождений элемента x в список. Это встроенный метод, реализованный на C, поэтому он работает быстро и эффективно.


numbers = [1, 2, 3, 2, 4, 2, 5]
cnt = numbers.count(2)
print(cnt)  # 3
  

Python list count (метод count для списков python)

Метод выполняет линейный проход по списку (O(n)) и сравнивает каждый элемент с переданным значением с помощью оператора ==.

Как подсчитать количество каждого элемента в списке одновременно?

Если требуется узнать, сколько раз встречается каждый элемент, удобно использовать класс Counter из модуля collections.


from collections import Counter

colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
counter = Counter(colors)
print(counter['red'])   # 2
print(counter['blue'])  # 3
  

Python list insert (метод insert для списков python)

Counter создает словарь, в котором ключи – элементы списка, значения – их количество. Недостаток: для подсчета одного элемента проще использовать count.

Как реализовать подсчет вручную без встроенных методов?

Можно использовать цикл for и переменную-счетчик.


def custom_count(lst, item):
    count = 0
    for element in lst:
        if element == item:
            count += 1
    return count

arr = [1, 2, 3, 2, 2, 4]
print(custom_count(arr, 2))  # 3
  

Python list len (метод len для списка python)

Этот подход менее эффективен, чем встроенный count, но дает полный контроль над процессом и условиями сравнения.

Как подсчитать элементы, удовлетворяющие сложному условию?

Можно использовать генераторное выражение с sum.


numbers = [1, 5, 8, 3, 9, 12, 4]
count_gt_5 = sum(1 for x in numbers if x > 5)
print(count_gt_5)  # 3 (8,9,12)
  

метод list python (методы списков в python)

Метод count не позволяет задавать условие, поэтому для подсчета по предикату нужны альтернативные решения.

Как подсчитать количество элементов с помощью filter и len?

Функция filter создает итератор, который можно преобразовать в список и получить его длину.


names = ['Anna', 'Alex', 'Bob', 'Alice', 'Adam']
count_a = len(list(filter(lambda name: name.startswith('A'), names)))
print(count_a)  # 3
  

Этот вариант создает промежуточный список, что может быть затратно по памяти. Лучше использовать генератор с sum.

Типичные ошибки при использовании count:

  • Подсчет вложенных списков: my_list.count([1,2]) вернет количество вхождений именно такого списка, а не элементов внутри него.
  • Сравнение с None: если в списке есть None, count считает его обычным элементом.
  • Изменяемые объекты: если объект изменился после добавления в список, count может не найти его, так как равенство проверяется по значению, а не по ссылке.
  • Производительность при многократном вызове count для разных значений: выгоднее один раз построить Counter.

Подсчет строк с игнорированием регистра

Пример

words = ['Python', 'python', 'PYTHON', 'Java', 'java']
target = 'python'
count_case_insensitive = sum(1 for w in words if w.lower() == target.lower())
print(count_case_insensitive)  # 3
3

Подсчет вхождений кортежей

Пример

points = [(1,2), (3,4), (1,2), (5,6)]
cnt = points.count((1,2))
print(cnt)  # 2
2

Подсчет чисел в заданном диапазоне

Пример

data = [15, 22, 8, 19, 31, 12, 27]
cnt = sum(1 for x in data if 10 <= x <= 20)
print(cnt)  # 3 (15,19,12)
3

Подсчет с преобразованием через map

Пример

nums = [0, 1, 0, 1, 1, 0, 1]
cnt = sum(map(lambda x: x == 1, nums))
print(cnt)  # 4
4

Подсчет булевых значений

Пример

bools = [True, False, True, True, False]
cnt_true = bools.count(True)
print(cnt_true)  # 3
3

Получение словаря частот с Counter

Пример

from collections import Counter
letters = ['a', 'b', 'a', 'c', 'b', 'a', 'd']
counter = Counter(letters)
print(counter)
print(counter.most_common(2))
Counter({'a': 3, 'b': 2, 'c': 1, 'd': 1})
[('a', 3), ('b', 2)]

Подсчет элемента во всех вложенных списках

Пример

matrix = [[1,2],[2,3],[1,4],[2,2]]
target = 2
total = sum(row.count(target) for row in matrix)
print(total)  # 4
4

Проверка уникальности элемента

Пример

items = [1, 2, 3, 4, 1]
def is_unique(item):
    return items.count(item) == 1
print(is_unique(2))  # True
print(is_unique(1))  # False
True
False

Подсчет с использованием reduce

Пример

from functools import reduce
nums = [1, 1, 2, 1, 3]
target = 1
cnt = reduce(lambda acc, x: acc + (x == target), nums, 0)
print(cnt)  # 3
3

Сравнение скорости count и Counter

Пример

import time
large_list = [1] * 1000000 + [2] * 500000
start = time.time()
c = large_list.count(1)
end = time.time()
print(f"count: {c}, time: {end-start:.5f} сек")
from collections import Counter
start = time.time()
counter = Counter(large_list)
c = counter[1]
end = time.time()
print(f"Counter: {c}, time: {end-start:.5f} сек")
count: 1000000, time: 0.01234 сек
Counter: 1000000, time: 0.05678 сек

Метод count для списков Python - comments

En
Python list count (python)