🖥 Как посчитать уникальные значений с Counter() ?



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



%%time

num_counts = {}

for num in a_long_list:

if num in num_counts:

num_counts[num] += 1

else:

num_counts[num] = 1



# Вывод в консоль

# CPU times: user 448 ms, sys: 1.77 ms, total: 450 ms

# Wall time: 450 ms






Однако более эффективный способ для решения этой задачи – использование Counter() из модуля collections. Весь код при этом уместится в одной строчке:





%%time

num_counts2 = Counter(a_long_list)



# Вывод в консоль

# CPU times: user 40.7 ms, sys: 329 μs, total: 41 ms

# Wall time: 41.2 ms





Этот фрагмент будет работать примерно в 10 раз быстрее, чем предыдущий.



У Counter также есть удобный метод most_common, позволяющий получить самые часто встречающиеся значения:





for number, count in num_counts2.most_common(10):

print(number, count)



# Вывод в консоль

29 19831

47 19811

7 19800

36 19794

14 19761

39 19748

32 19747

16 19737

34 19729

33 19729






Одним словом, collections – это замечательный модуль, который должен быть в базовом наборе инструментов любого Python-разработчика. Не поленитесь прочитать наше руководство по применению модуля.



@python_job_interview