Счет уникальных слов в списке в Python: решение
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для подсчёта частоты повторений элементов в списке используется класс Counter
из модуля collections
:
from collections import Counter
counts = Counter(['яблоко', 'банан', 'яблоко', 'апельсин', 'банан', 'яблоко'])
print(counts) # Counter({'яблоко': 3, 'банан': 2, 'апельсин': 1})
Если вы хотите узнать количество уникальных элементов, используйте функцию set()
в сочетании с Counter
:
unique_counts = Counter(set(['яблоко', 'банан', 'яблоко', 'апельсин', 'банан', 'яблоко']))
print(unique_counts) # Counter({'яблоко': 1, 'банан': 1, 'апельсин': 1})
Подсчёт с использованием numpy
Модуль numpy
полезен при работе с числовыми массивами. Функция unique
предоставляет нужную нам функциональность:
import numpy as np
data = np.array(['яблоко', 'банан', 'яблоко', 'апельсин', 'банан', 'яблоко'])
values, counts = np.unique(data, return_counts=True)
print(dict(zip(values, counts))) # {'яблоко': 3, 'банан': 2, 'апельсин': 1}
Ввод данных пользователем и использование Counter
Чтобы подсчитать слова, введённые пользователем до того, как он введёт пустую строку, выполните:
words = []
while (user_input := input("Введите слово (оставьте строку пустой для завершения): ")) != "":
words.append(user_input)
print(Counter(words)) # Теперь слова подсчитаны...
Обратите внимание, что для Python 3 требуется использовать функцию input
.
Визуализация
Представим, что вы находитесь в супермаркете и ваша корзина для покупок выглядит так:
Фрукт | Количество |
---|---|
🍎 Яблоко | 2 |
🍌 Банан | 2 |
🍇 Виноград | 3 |
Для подсчета каждого фрукта вы можете использовать Counter
следующим образом:
fruit_tally = Counter(['🍎', '🍌', '🍇', '🍌', '🍎', '🍇', '🍇'])
🛒✅🍎🍌🍇 – С помощью Counter
вы всегда будете уверены, что ничего не забыли!
Эффективность и продвинутые методы
Управление памятью при обработке больших наборов данных
Столкнулись с огромным списком? Counter
эффективен, но использование len(set(list))
может сэкономить память при подсчете уникальных элементов.
Улучшаем производительность с помощью списочных включений
Списочные включения – мощное средство Python-программиста. Их можно использовать вместе с Counter
для фильтрации:
comprehended_counts = Counter(x.lower() for x in ['APPLE', 'apple', 'Orange', 'ORANGE', 'BANANA'])
print(comprehended_counts) # Никогда не забывайте о силе нижнего регистра!
Работа с табличными данными? Используйте pandas
Метод pandas.Series.value_counts
эффективно подсчитывает вхождения в таблично-представленных данных:
import pandas as pd
fruits_series = pd.Series(['яблоко', 'банан', 'яблоко', 'апельсин', 'банан', 'яблоко'])
print(fruits_series.value_counts()) # Проанализировать чек из продуктового магазина?
Усиленный подсчёт с использованием словарного включения
Для управления подсчетом можно использовать словарные включения:
fruit_list = ['яблоко', 'банан', 'яблоко', 'апельсин', 'банан', 'яблоко']
fruit_count = {x: fruit_list.count(x) for x in set(fruit_list)}
print(fruit_count) # Подсчитываем: один, два, три...
Полезные материалы
- collections — Container datatypes — Python 3.12.2 documentation — Официальная документация Python по
Counter
. - How do I count the occurrences of a list item? – Stack Overflow — Обсуждение на Stack Overflow с разными вариантами решения.
- Python's Counter: The Pythonic Way to Count Objects – Real Python — Полное руководство по
Counter
. - Python Sets – W3Schools — Информация из W3Schools о множествах и уникальных элементах в Python.
- pandas.Series.value_counts — pandas 2.2.0 documentation — Описание функции
pandas.Series.value_counts
в документации pandas. - 5. Data Structures — Python 3.12.2 documentation — О списочных включениях в официальной документации Python.
- Python Dictionary Comprehension – GeeksforGeeks — Обзор словарных включений от GeeksforGeeks.