dawning
@dawning
Developer

Как подсчитать количество вхождения каждого слова в списке?

Например есть список:
1
12
123
11
1
12
12
...
нужно подсчитать количество вхождений каждой строки а затем отсортировать по популярности.
Может быть есть какой софт для данной задачи?
Или скрипт на пхп или питоне...
  • Вопрос задан
  • 2197 просмотров
Решения вопроса 2
aRegius
@aRegius
Python Enthusiast
На Python это делается элементарно, при помощи класса Counter из модуля collections. А любое количество наиболее часто встречающихся элементов находите при помощи метода most_common():

>>> text = ['1', '12', '123', '11', '1', '12', '12']
>>> from collections import Counter
>>> text_counts = Counter(text)
>>> text_counts
Counter({'12': 3, '1': 2, '11': 1, '123': 1})
>>> top_two = text_counts.most_common(2)
>>> top_two
[('12', 3), ('1', 2)]
Ответ написан
Комментировать
coderisimo
@coderisimo
достаточно двух функций на PHP

$fruits = array("orange", "lemon",  "apple", "orange",  "banana", "orange", "apple");
$ratingFruits= array_count_values($fruits);
asort($ratingFruits);
print_r($ratingFruits);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@GeneD88
QA
Что вы подразумеваете под "вхождением" каждой строки? Частоту?
Вы хотите получить что то типа:
{1: 7, // 1 в 1, 12, 123, 11, 1, 12, 12
12: 4,
etc}
?

Или же
{12: 3,
1: 2,
etc}
?

from collections import OrderedDict
d = map(str,[1,12,123,11,3,12,12])

для первого:
OrderedDict(sorted({i: len([j for j in d if j.startswith(i)]) for i in d}.items(), key=lambda x: x[1], reverse = True))

для второго:
OrderedDict(sorted({i:d.count(i) for i in d}.items(), key=lambda x: x[1], reverse=True))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы