Форум сайта python.su
0
В тексте найти самое часто встречаемое слово. Регистр не учитывать.
a = “ab aa ab aa ll kk pp aa”
я разбиваю список на части при помощи split
потом насколько я понимаю.удобнее всего будет записывать все в словарь.
тоясть {'ab':2,'aa':3} и тд но не могу сообразить как это написать на питоне.подскажите.лучше всего наиболее простым способом.без использования доп методов
Офлайн
0
Можно например так
a = "ab aa ab aa ll kk pp aa" d = {i: a.split().count(i) for i in a.split()} print d
Офлайн
568
tapakah68Можно, но это крайне не оптимально, задача решается за один проход. Ваше решение умрет на более-менее больших текстах. Кроме того вы не выполнили требование “Регистр не учитывать”.
Можно например так
Офлайн
568
import random from operator import itemgetter # подготовка тестовых данных words_cache = [" abc", " def", " ghij"] s = "" for i in xrange(10000): s += random.choice(words_cache) # Само решение res = {} for word in s.split(): if word.lower() in res: res[word] += 1 else: res[word] = 1 print(max(res.iteritems(), key=itemgetter(1))[0])
Отредактировано FishHook (Дек. 25, 2016 07:40:43)
Офлайн
857
>>> import collections >>> >>> s = 'ab aa ab Aa ll kk pp aa' >>> >>> c = collections.Counter(s.lower().split()) >>> c.most_common()[0][0] 'aa' >>>
Отредактировано py.user.next (Дек. 25, 2016 14:16:57)
Офлайн
0
а можно это как то сделать без использования count ? и вызова доп функций?просто задача понять как все работает и написать в ручную.а не пользоваться готовыми методами и функциями.
п.с. в любом случае спасибо всем кто уделил внимание
Офлайн
568
я же вам все дал
s = "ab aa ab aa ll kk pp aa" res = {} for word in s.split(): if word.lower() in res: res[word] += 1 else: res[word] = 1 print(max(res.iteritems(), key=lambda x: x[1])[0])
Отредактировано FishHook (Дек. 25, 2016 18:37:50)
Офлайн
0
FishHookспасибо.не увидел
я же вам все дал
Отредактировано alextt (Дек. 25, 2016 22:51:47)
Офлайн