Форум сайта python.su
Добрый день!
Условие:
Дан текст. Выведите слово, которое в этом тексте встречается чаще всего.
Решение:
tekst = input("Введите текст: ") #Набор слов через пробел. Например, огурец помидор огурец перец l = tekst.split(" ") l1 = [] print(l) for i in l: l1.append(l.count(i)) d = dict(zip(l, l1)) print(d) for key in d.keys(): if all(d.get(key) == 1 for key in d.keys()): print("В тексте отсуствуют повторяющиеся слова.") elif d.get(key) >= 2: print(key)
for key in d.keys(): if all(d.get(key) == 1 for key in d.keys()):
if all(d.get(key) == 1 for key in d.keys()): print("В тексте отсуствуют повторяющиееся слова.")
Отредактировано Dorum (Дек. 8, 2016 21:04:03)
Офлайн
DorumЧерез collections.Counter(), сейчас его, вроде, ускорили до приличного уровня, раньше же он работал в 17 раз медленнее обычного словарного включения.
3) Как бы Вы решили эту задачу?
>>> import collections >>> >>> text = 'abc def abc def abc' >>> >>> c = collections.Counter(text.split()) >>> max(c, key=lambda i: c[i]) 'abc' >>>
DorumФункции all() и any() - это просто функции, которые сами по себе ничего не значат.
Я только-только открыл для себя функцию “all”.
Отредактировано py.user.next (Дек. 9, 2016 03:17:02)
Офлайн
py.user.nextС помощью этой функции я пытался найти ответ на вопрос: Если все слова не повторялись больше одного раза в тексте, то вывести print(). То есть, если все значения в словаре равны 1, то print(“В тексте нет повторяющихся слов.”)
Функции all() и any() - это просто функции, которые сами по себе ничего не значат.
Для этой задачи сложно даже найти им применение.
Отредактировано Dorum (Дек. 9, 2016 09:59:51)
Офлайн
DorumВам бы стоило почитать о словарях в питоне, судя по коду вы не очень понимаете как с ними работать, например:
Меня интересует путь решения через словарь
#ПЛОХО for key in d.keys():
#лучше for key in d:
for key in d.keys(): if all(d.get(key) == 1 for key in d.keys()):
Отредактировано FishHook (Дек. 9, 2016 10:16:23)
Офлайн
Вот ваше решение
tekst = input("Введите текст: ") #Набор слов через пробел. Например, огурец помидор огурец перец words = tekst.split(" ") count_mapping = {} for w in words: count_mapping.setdefault(w, 0) count_mapping[w] += 1 if all(v == 1 for v in count_mapping.values()): print("В тексте отсуствуют повторяющиеся слова.") else: for word, count in count_mapping.items(): if count > 1: print(word, "->", count)
Офлайн
Полное условие задачи:
Дан текст: в первой строке задано число строк, далее идут сами строки. Выведите слово, которое в этом тексте встречается чаще всего. Если таких слов несколько, выведите то, которое меньше в лексикографическом порядке.
Решение:
x = 0 text = [] word = [] result = [] n = int(input("Сколько будет строк? ")) while x != n: y = input("Введите текст: ") x += 1 text.append(y) string = " ".join(text) new_text = string.split(" ") print(new_text) for i in new_text: word.append(new_text.count(i)) d = dict(zip(new_text, word)) if all(val == 1 for val in d.values()): print("В тексте отсутствуют повторяющиеся слова.") else: for key, val in d.items(): if val == max(word): result.append(key) result.sort() print(result[0])
Офлайн
Dorumесли вникнуть в задание то строк в тексте дано согласно значению из первой строки ( то есть не одна и слов в строке тоже не одно) а раз решение выполняется через словарь то смысла создавать список я не вижу. наверно проще получив строку в список сразу обрабатываем его создавая словарь где ключ слово а значение 1 и если ключ(слово) повторяется то в словаре с этим ключом увеличиваем значение на 1. ну а потом проходим по отсортированному словарю и сравниваем значения значений словаря по максимальному значению из словаря. при совпадении выводим ключ и выходим из цикла
Полное условие задачи:Дан текст: в первой строке задано число строк, далее идут сами строки. Выведите слово, которое в этом тексте встречается чаще всего. Если таких слов несколько, выведите то, которое меньше в лексикографическом порядке.Решение:
number_of_words = {} for _ in range(int(input())): word = input().split() for i in word: if i not in number_of_words: number_of_words[i] = 1 else: number_of_words[i] += 1 max_values = max(number_of_words.values()) for key in sorted(number_of_words.keys()): if number_of_words[key] == max_values: print(key) break
Отредактировано marvellik (Дек. 9, 2016 20:07:06)
Офлайн
FishHook
marvellikСпасибо за уделенное время. Все учел. Многое взял на вооружение.
Офлайн
py.user.next
>>> import collections
>>>
>>> text = ‘abc def abc def abc’
>>>
>>> c = collections.Counter(text.split())
>>> max(c, key=lambda i: c)
'abc'
>>>
Dorum
Я только-только открыл для себя функцию “all”.
Функции all() и any() - это просто функции, которые сами по себе ничего не значат.
Для этой задачи сложно даже найти им применение.
Офлайн
IsemНу, давай, грепни по своим исходникам эти функции и покажи результаты. Там будет ноль строк, потому что эти чрезвычайно полезные функции не такие уж и полезные. Ещё неизвестно, что полезнее, all() или math.sin().
Это чрезвычайно полезные функции
Отредактировано py.user.next (Дек. 11, 2016 03:49:45)
Офлайн