среда, 11 декабря 2013 г.

Python нахождение наиболее часто встречающейся буквы в тексте

Задача: нахождение наиболее часто встречающейся буквы в тексте (использование например в криптографии при дешифровке). Требуется:

  • ищем только буквы
  • нет зависимости от регистра ('a' и 'A' считаются одинаковой буквой)
  • ищем букву которая встречается максимальное количество раз
  • если таких букв несколько, то результат выдаем первую встречающуюся по алфавиту
Решение мое:

>>> dict = {}
>>> text = "AavvvddAsfgh"
>>> letters = map(chr, range(ord('a'), ord('z')))

>>> for ch in text:
>>>     ch_lower = ch.lower()
>>>     if ch_lower in letters:
>>>         if dict.has_key(ch_lower):
>>>             dict[ch_lower] += 1            
>>>         else:
>>>             dict[ch_lower] = 1            

>>> out = [key for key, value in dict.items() if value == max(dict.values())]
>>> out.sort()
>>> print out[0]
a
Решение от гуру:
для Python 3.3
>>> import string
>>> def out_chr(text):
>>>     return max(string.ascii_lowercase, 
                   key=lambda ch: text.lower().count(ch))
для Python 2.7
>>> import re
>>> from collections import Counter

>>> def out_chr(text):
>>>     text = "".join(re.findall("\w", text.lower()))
>>>     return Counter(text).most_common()[0][0]



2 комментария:

  1. "Python нахождение наиболее часто встречающегося СИМВОЛА
    "ищем только буквы"
    олень блять

    ОтветитьУдалить
    Ответы
    1. Поправил. Спасибо за содержательный комментарий )

      Удалить