Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 24, 2016 19:09:29

alextt
Зарегистрирован: 2016-12-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

задачка

В тексте найти самое часто встречаемое слово. Регистр не учитывать.

a = “ab aa ab aa ll kk pp aa”
я разбиваю список на части при помощи split
потом насколько я понимаю.удобнее всего будет записывать все в словарь.
тоясть {'ab':2,'aa':3} и тд но не могу сообразить как это написать на питоне.подскажите.лучше всего наиболее простым способом.без использования доп методов

Офлайн

#2 Дек. 24, 2016 21:06:25

tapakah68
Зарегистрирован: 2016-12-24
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

задачка

Можно например так

 a = "ab aa ab aa ll kk pp aa"
d = {i: a.split().count(i) for i in a.split()}
print d

Выведет {'aa': 3, ‘kk’: 1, ‘ll’: 1, ‘ab’: 2, ‘pp’: 1}

Офлайн

#3 Дек. 25, 2016 07:35:45

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

задачка

tapakah68
Можно например так
Можно, но это крайне не оптимально, задача решается за один проход. Ваше решение умрет на более-менее больших текстах. Кроме того вы не выполнили требование “Регистр не учитывать”.





Офлайн

#4 Дек. 25, 2016 07:39:37

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

задачка

  
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)

Офлайн

#5 Дек. 25, 2016 14:16:11

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

задачка

  
>>> 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)

Офлайн

#6 Дек. 25, 2016 17:13:59

alextt
Зарегистрирован: 2016-12-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

задачка

а можно это как то сделать без использования count ? и вызова доп функций?просто задача понять как все работает и написать в ручную.а не пользоваться готовыми методами и функциями.
п.с. в любом случае спасибо всем кто уделил внимание

Офлайн

#7 Дек. 25, 2016 18:37:27

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

задачка

я же вам все дал

   
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)

Офлайн

#8 Дек. 25, 2016 22:50:50

alextt
Зарегистрирован: 2016-12-24
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

задачка

FishHook
я же вам все дал
спасибо.не увидел

Отредактировано alextt (Дек. 25, 2016 22:51:47)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version