Найти - Пользователи
Полная версия: Синтакс функции max()
Начало » Python для новичков » Синтакс функции max()
1 2
py.user.next
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'
>>>
EvgenKlim
JOHN_16

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

text = ''.join(i for i in text.lower() if i.isalpha())
return max(set(text), key=text.count)
py.user.next
Сравнил по времени: самый первый вариант - самый быстрый. Скорее всего, ввиду того что сишная реализация используется. Самый медленный, как и ожидалось, - с 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]
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB