Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/302: Рейтинг темы: голосов - 302, средняя оценка - 4.79
5 / 5 / 0
Регистрация: 19.01.2018
Сообщений: 4

Выведите слово, которое в тексте встречается чаще всего

27.01.2018, 15:39. Показов 63969. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

На онлайн-курсах получил вот такую задачу:

Дан текст. Выведите слово, которое в этом тексте встречается чаще всего. Если таких слов несколько, выведите то, которое меньше в лексикографическом порядке.

Тест 1
Входные данные:
apple orange banana banana orange

Вывод программы:
banana



Тест 2
Входные данные:
oh you touch my tralala mmm my ding ding dong

Вывод программы:
ding



Тест 3
Входные данные:
q w e r t y u i o p
a s d f g h j k l
z x c v b n m

Вывод программы:
a


И вроде как все работает, но проверка считает, что мой код работает слишком медленно и не оптимально.
Python
1
2
3
4
5
6
7
8
9
10
fin = open('input.txt', encoding='utf8')
d = {}
for line in fin:
    words = line.strip().split()
    for word in words:
        d[word] = d.get(word, 0) + 1
for i in sorted(d.items(), key=lambda x: (x[0])):
    if i[1] == max(d.values()):
        print(i[0])
        break
Подскажите пожалуйста, как можно оптимизировать мой код?

Заранее спасибо!
1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.01.2018, 15:39
Ответы с готовыми решениями:

Выведите САМОЕ короткое слово, которое в тексте встречается чаще всего
Дан текст. Выведите САМОЕ короткое слово, которое в этом тексте встречается чаще всего. Далее после нахождения такого слова ...

Вывести на экран слово, которое встречается в тексте чаще всего
Дан текст, состоящий из количества строк текста и самого текста. Вывести на экран слово, которое встречается в тексте чаще всего. Для...

Найти слово в списке, которое встречается чаще всего
Здравствуйте. Полностью задача звучит так: Дан текст: в первой строке задано число строк, далее идут сами строки. Выведите слово,...

9
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
27.01.2018, 19:44
Лучший ответ Сообщение было отмечено RedSloth как решение

Решение

Python
1
2
3
4
5
from collections import Counter
 
>>> def most_common(t):
...     return sorted((x for x in Counter(t.split()).items()), key=lambda x: (-x[1], x[0]))[0][0]
...
Python
1
2
3
4
5
6
7
8
9
10
11
>>> a = 'apple orange banana banana orange'
>>> most_common(a)
'banana'
>>> a = 'oh you touch my tralala mmm my ding ding dong'
>>> most_common(a)
'ding'
>>> a = '''q w e r t y u i o p
... a s d f g h j k l
... z x c v b n m'''
>>> most_common(a)
'a'
Добавлено через 14 минут
без импорта

Python
1
2
3
>>> def most_common(t):
...     return sorted(((x, a.count(x)) for x in set(a.split())), key=lambda x: (-x[1], x[0]))[0][0]
...
Python
1
2
3
4
5
6
7
8
9
10
11
>>> a = 'apple orange banana banana orange'
>>> most_common(a)
'banana'
>>> a = 'oh you touch my tralala mmm my ding ding dong'
>>> most_common(a)
'ding'
>>> a = '''q w e r t y u i o p
... a s d f g h j k l
... z x c v b n m'''
>>> most_common(a)
'a'
2
27 / 26 / 6
Регистрация: 02.02.2014
Сообщений: 96
28.01.2018, 11:07
так у Counter же есть свой most_common
1
5 / 5 / 0
Регистрация: 19.01.2018
Сообщений: 4
28.01.2018, 13:13  [ТС]
Jabbson, спасибо, но если честно не очень понял.

Python
1
2
3
>>> def most_common(t):
...     return sorted(((x, a.count(x)) for x in set(a.split())), key=lambda x: (-x[1], x[0]))[0][0]
...
я правильно понимаю, что там где три точки в Вашем коде, идет ввод текста так, как он был у меня, или нет?

Добавлено через 19 минут
в общем код заработал вот в таком виде. Вдруг кому будет полезно:

Python
1
2
3
4
5
6
7
fin = open('input.txt', encoding='utf8')
d = {}
for line in fin:
    words = line.strip().split()
    for word in words:
        d[word] = d.get(word, 0) + 1
print(sorted(d.items(), key=lambda x: (-x[1], x[0]))[0][0])
Еще раз спасибо сэру Jabbson'у
3
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
28.01.2018, 18:00
warhast, так вы предлагайте код, я в курсе про мост коммон. Жду код.

Добавлено через 15 минут
Цитата Сообщение от RedSloth Посмотреть сообщение
в общем код заработал вот в таком виде. Вдруг кому будет полезно:
файлы после использования не плохо бы закрыть или открывать через with.

Python
1
2
3
with open('output.txt') as f_in:
    t = f_in.read()
    print(sorted(((x, t.count(x)) for x in set(t.split())), key=lambda x: (-x[1], x[0]))[0][0])
(Это если можно прочитать сразу весь файл, а не читать построчно).
0
Модератор
Эксперт функциональных языков программирования
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
28.01.2018, 18:04
Цитата Сообщение от RedSloth Посмотреть сообщение
print(sorted(d.items(), key=lambda x: (-x[1], x[0]))[0][0])
Не имеет смысла сортировать весь список, если нужно найти минимальный элемент.
Python
1
print(min(d.items(), key=lambda x: (-x[1],x[0]))[0])
1
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
28.01.2018, 19:11
Цитата Сообщение от Shamil1 Посмотреть сообщение
Не имеет смысла сортировать весь список, если нужно найти минимальный элемент.
Согласен.

RedSloth, делайте, как у Shamil1.
0
 Аватар для Pavelpds
8 / 8 / 0
Регистрация: 26.01.2019
Сообщений: 35
29.01.2019, 23:17
Еще один вариант решения данной задачи:
Python
1
2
3
4
5
6
7
8
import sys
 
wordS = (str(sys.stdin.read()).split())
myDict = {}
for word in wordS:
    myDict[word] = myDict.get(word, 0) + 1
maxW = max(myDict.values())
print(min(list(a for a, b in myDict.items() if b == maxW)))
Объясните пожалуйста, в чем смысл последней строки кода??!!
print(min(list(a for a, b in myDict.items() if b == maxW)))
Понятно все, кроме последней строки...
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
29.01.2019, 23:28
короткая запись для

Python
1
2
3
4
5
lst = []
for a, b in myDict.items():
    if b == maxW:
        lst.append(a)
print(min(lst)
Добавлено через 1 минуту
можно
Python
1
print(min(a for a, b in myDict.items() if b == maxW))
1
 Аватар для Pavelpds
8 / 8 / 0
Регистрация: 26.01.2019
Сообщений: 35
30.01.2019, 20:24
Jabbson, БЛАГОДАРЮ ЗА РАЗЪЯСНЕНИЕ !!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.01.2019, 20:24
Помогаю со студенческими работами здесь

Число, которое встречается чаще всего в списке = Тайм-лимит
Дан список целых чисел. Найдите число, которое встречается чаще всего в списке. Входные данные: В единственной строке содержится...

Выведите десять существительных, которые встречаются в тексте чаще всего
Дан отрывок из литературного произведения. Выведите через пробел десять существительных, которые встречаются в тексте чаще всего....

Выведите через пробел десять существительных, которые встречаются в тексте чаще всего
Существительные Помогите пожалуйста с задачей Ограничение времени 100 секунд Ограничение памяти 64Mb Ввод стандартный ввод или...

Какое слово в текстовом файле встречается чаще всего
Составьте программу, которая считает какое слово в текстовом файле встречается чаще всего и записывает его в новый файл.если таких слов...

Выведите через пробел десять существительных, которые встречаются в данном тексте чаще всего
Дан отрывок из литературного произведения. Выведите через пробел десять существительных, которые встречаются в тексте чаще всего....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru