Уведомления

Группа в Telegram: @pythonsu

#1 Май 29, 2014 07:43:11

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

Синтакс функции max()

EvgenKlim
видел также такое решение
Это ближе к нормальному, но тоже .count() будет проходить по тексту в миллион символов несколько раз.

EvgenKlim
я лично делал через Counter, но это еще дольше
Он правильно делает, но долго. Так как он общий, там всё учитывается, даже то, что не надо.
Мы тут как-то сравнивали, получался он в 17 раз медленнее словаря.

EvgenKlim
Сортировка нужна, т.к. если например слово “bca”, то ответ = ‘a’, т.е. при равной частоте вывод по алфавиту

>>> import string
>>> 
>>> def f(s):
...     d = {}
...     for c in s:
...         if c in string.ascii_lowercase:
...             d[c] = d.get(c, 0) + 1
...     m = max(d.values())
...     return sorted(k for k in d if d[k] == m)[0]
... 
>>> f('dcba dcba efgh')
'a'
>>>



Офлайн

#2 Май 29, 2014 10:34:51

EvgenKlim
Зарегистрирован: 2014-05-12
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Синтакс функции max()

JOHN_16

нет, я имел ввиду что перед выполнением return max(set(text), key=text.count)
text очистили, т.е. в переменной text содержался уже только текст без цифр и пр знаков. а после выполнения set остались только те буквы которые есть в тексте, т.е не весь алфавит целиком.

Офлайн

#3 Май 29, 2014 23:34:27

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Синтакс функции max()

EvgenKlim
Если все всем все будут выражаться более конкретно и корректно во всем мире атрофируется недопонимание. Я за. И да это легкий намек ;)



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Май 30, 2014 06:29:19

EvgenKlim
Зарегистрирован: 2014-05-12
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Синтакс функции max()

JOHN_16

text = ''.join(i for i in text.lower() if i.isalpha())
return max(set(text), key=text.count)

Офлайн

#5 Май 30, 2014 09:41:44

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

Синтакс функции max()

Сравнил по времени: самый первый вариант - самый быстрый. Скорее всего, ввиду того что сишная реализация используется. Самый медленный, как и ожидалось, - с Counter'ом. А два варианта не работают, так как там нет сортировки символов (выдают первый встретившийся). Добавление сортировки замедлит скорость.

Сравнивал эти:

import string
 
def checkio1(text):
    text = text.lower()
    return max(string.ascii_lowercase, key=text.count)
 
import re
from collections import Counter
 
st=re.compile('[a-zA-Z]')
 
def checkio2(text):
    ns=""
    for i in text:
        if st.match(i): ns+=i
    ns=ns.lower()
    ns=list(ns)
    ns.sort()
    d=Counter(ns).most_common(1)
    return d[0][0]
 
def checkio3(text):
    return max(set(text), key=text.count)
 
import string
 
def checkio4(s):
    d = {}
    for c in s:
        if c in string.ascii_lowercase:
            d[c] = d.get(c, 0) + 1
    m = max(d.values())
    return sorted(k for k in d if d[k] == m)[0]



Отредактировано py.user.next (Май 30, 2014 09:46:11)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version