Счет уникальных слов в списке в Python: решение

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для подсчёта частоты повторений элементов в списке используется класс Counter из модуля collections:

Python
Скопировать код
from collections import Counter
counts = Counter(['яблоко', 'банан', 'яблоко', 'апельсин', 'банан', 'яблоко'])
print(counts)  # Counter({'яблоко': 3, 'банан': 2, 'апельсин': 1})

Если вы хотите узнать количество уникальных элементов, используйте функцию set() в сочетании с Counter:

Python
Скопировать код
unique_counts = Counter(set(['яблоко', 'банан', 'яблоко', 'апельсин', 'банан', 'яблоко']))
print(unique_counts)  # Counter({'яблоко': 1, 'банан': 1, 'апельсин': 1})
Кинга Идем в IT: пошаговый план для смены профессии

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

Модуль numpy полезен при работе с числовыми массивами. Функция unique предоставляет нужную нам функциональность:

Python
Скопировать код
import numpy as np

data = np.array(['яблоко', 'банан', 'яблоко', 'апельсин', 'банан', 'яблоко'])
values, counts = np.unique(data, return_counts=True)
print(dict(zip(values, counts)))  # {'яблоко': 3, 'банан': 2, 'апельсин': 1}

Ввод данных пользователем и использование Counter

Чтобы подсчитать слова, введённые пользователем до того, как он введёт пустую строку, выполните:

Python
Скопировать код
words = []
while (user_input := input("Введите слово (оставьте строку пустой для завершения): ")) != "":
    words.append(user_input)

print(Counter(words))  # Теперь слова подсчитаны...

Обратите внимание, что для Python 3 требуется использовать функцию input.

Визуализация

Представим, что вы находитесь в супермаркете и ваша корзина для покупок выглядит так:

ФруктКоличество
🍎 Яблоко2
🍌 Банан2
🍇 Виноград3

Для подсчета каждого фрукта вы можете использовать Counter следующим образом:

Python
Скопировать код
fruit_tally = Counter(['🍎', '🍌', '🍇', '🍌', '🍎', '🍇', '🍇'])

🛒✅🍎🍌🍇 – С помощью Counter вы всегда будете уверены, что ничего не забыли!

Эффективность и продвинутые методы

Управление памятью при обработке больших наборов данных

Столкнулись с огромным списком? Counter эффективен, но использование len(set(list)) может сэкономить память при подсчете уникальных элементов.

Улучшаем производительность с помощью списочных включений

Списочные включения – мощное средство Python-программиста. Их можно использовать вместе с Counter для фильтрации:

Python
Скопировать код
comprehended_counts = Counter(x.lower() for x in ['APPLE', 'apple', 'Orange', 'ORANGE', 'BANANA'])
print(comprehended_counts)  # Никогда не забывайте о силе нижнего регистра!

Работа с табличными данными? Используйте pandas

Метод pandas.Series.value_counts эффективно подсчитывает вхождения в таблично-представленных данных:

Python
Скопировать код
import pandas as pd

fruits_series = pd.Series(['яблоко', 'банан', 'яблоко', 'апельсин', 'банан', 'яблоко'])
print(fruits_series.value_counts())  # Проанализировать чек из продуктового магазина?

Усиленный подсчёт с использованием словарного включения

Для управления подсчетом можно использовать словарные включения:

Python
Скопировать код
fruit_list = ['яблоко', 'банан', 'яблоко', 'апельсин', 'банан', 'яблоко']
fruit_count = {x: fruit_list.count(x) for x in set(fruit_list)}
print(fruit_count)  # Подсчитываем: один, два, три...

Полезные материалы

  1. collections — Container datatypes — Python 3.12.2 documentation — Официальная документация Python по Counter.
  2. How do I count the occurrences of a list item? – Stack Overflow — Обсуждение на Stack Overflow с разными вариантами решения.
  3. Python's Counter: The Pythonic Way to Count Objects – Real Python — Полное руководство по Counter.
  4. Python Sets – W3Schools — Информация из W3Schools о множествах и уникальных элементах в Python.
  5. pandas.Series.value_counts — pandas 2.2.0 documentation — Описание функции pandas.Series.value_counts в документации pandas.
  6. 5. Data Structures — Python 3.12.2 documentation — О списочных включениях в официальной документации Python.
  7. Python Dictionary Comprehension – GeeksforGeeks — Обзор словарных включений от GeeksforGeeks.