Как найти символ который чаще всего встречается в строке питон
Перейти к содержимому

Как найти символ который чаще всего встречается в строке питон

  • автор:

Подсчет вхождений символа в строку Python

В этом посте мы обсудим, как подсчитывать количество вхождений символа в строку в Python.

1. Использование str.count() функция

Простое и эффективное решение состоит в том, чтобы получить общее количество вхождений символа в строке с помощью функции str.count() функция. Это лучшее решение для подсчета одного символа в строке.

2. Использование collections.Counter class

Если вам нужно найти частоту нескольких символов, вызывая str.count() функция для каждого символа не рекомендуется. Вместо этого было бы лучше, если бы вы использовали collections.Counter Класс Pythonа. Он работает, сохраняя каждый символ в виде ключей словаря, а их количество — в виде значений словаря.

The Counter class требует линейного времени для предварительной обработки строки и предлагает операции подсчета с постоянным временем. Однако он занимает некоторое место для хранения частоты каждого символа.

Нахождение наиболее часто встречающегося символа в строке

Я нашел эту проблему программирования, глядя на публикацию работы на SO. Я думал, что это было довольно интересно, и, как начинающий программист на Python, я пытался заняться этим. Однако я чувствую, что мое решение довольно . грязное . Кто-нибудь может предложить какие-либо предложения по его оптимизации или сделать его чище? Я знаю, что это довольно тривиально, но мне было весело писать это. Примечание: Python 2.6

Проблема:

Напишите псевдокод (или реальный код) для функции, которая принимает строку и возвращает букву, которая больше всего отображается в этой строке.

Моя попытка:

Вывод:

9 ответов

Есть много способов сделать это короче. Например, вы можете использовать Counter класс (в Python 2.7 или более поздней версии):

Если у вас этого нет, вы можете выполнить подсчет вручную (2.5 или более поздняя версия имеет defaultdict ):

Сказав это, нет ничего слишком плохого в вашей реализации.

Вот способ найти наиболее распространенный символ, используя словарь

Я заметил, что большинство ответов возвращаются только с одним элементом, даже если наиболее часто используется одинаковое количество символов. Например «iii 444 yyy 999». Есть равное количество пробелов, я, 4, у и 9. Решение должно вернуться со всем, а не только с буквой i:

frequencies — это список кортежей, которые считают символы (character, count) . Мы применяем max к кортежам с помощью count и возвращаем character этого кортежа. В случае ничьей, это решение выберет только одно.

Самый частый символ

Хочу сделать чтобы я вводил слово и мне писало символ который появляется в слове наиболее часто. Не лезет в голову как можно сделать это. Пожалуйста помогите. Например у нас есть слово: приоритет. Нам должно вывести, что наиболее частый символ это и, т . Не нужно чтобы оно писало количество, а только выводило символ.

splash58's user avatar

Т.к. метод most_common возвращает список самых частых значений (даже если мы запросили одно самое частое значение), то нужно взять первый элемент (для этого нужен первый [0] ). Каждый элемент в этом списке — пара (элемент, количество) , поэтому нужно взять первый элемент еще раз.

Вообще, в слове «приоритет» есть 3 буквы, которые встречаются по два раза (р, и, т), выведет только одну из них (у меня вывело «р»).

Вариант решения без использования Counter :

insolor's user avatar

Решение без использования модуля Counter :

вывести все буквы с одинаковым количеством вхождений, думаю, сам сможешь. а этот код выведет:

Благодаря наставлению старших товарищей (см. примечание @gil9red), напишу более понятный для наметаного глаза вариант кода без Count :

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

Как найти самый частый символ в строке?

Смотрел готовые решения, но ничего подходящего не нашел, либо они были сложными и надо было подключать модуль Counter.

Можно ли как-то проще решить?

  • Вопрос задан более двух лет назад
  • 10820 просмотров

Простой 2 комментария

  • Facebook
  • Вконтакте
  • Twitter

kshnkvn

  • Facebook
  • Вконтакте
  • Twitter

sswwssww

p.s.: я мягко говоря в шоке от того что тут предлагают все возможные заковыристые(привет дзен Python ) и не работающие даже на <3.8 версиях языка варианты кроме самого очевидного и простого
p.s. 2: лучше юзать Counter

  • Facebook
  • Вконтакте
  • Twitter

kshnkvn

sswwssww

kshnkvn

sswwssww

Ivan Yakushenko, во вселенной где есть PEP 8, например.
5f88a4a6bb588538726155.jpeg

kshnkvn

sswwssww

kshnkvn

sswwssww

kshnkvn

sswwssww

kshnkvn

Процитируй мне моё сообщение, где я тебя хоть в чем то обвиняю.

Просто напоминаю — это не я, а ты написал ответ в стиле «смотрите какой я крутой, а все дурачки», но при этом облажался с решением. Ха.

И что бы не опускать тему про pep — это всего лишь общепринятое универсальное соглашение, но универсальность не покрывает специфику, соответственно в некоторых командах/компания данное соглашение обсуждается и некоторые пункты, а иногда и многие могут опускаться в угоду различным обстоятельствам.

sswwssww

kshnkvn

Выключай фантазию, она тебя не туда ведет. Я написал всего одну строчку кода (3, если быть максимально точным), исходя из посыла автора в контексте того, что он уже что то гуглил и пробовал и «стандартные» решения, почему то, ему не подошли. Это единственная причина по которой была написана тут это строчка. Все, больше я не написал ни слова, кроме единственного условия, при котором эта строчка будет работать. С чего ты делаешь выводы про мой «выпендреж» мне не ясно. Или по твоему все люди, которые увлекаются код-гольфингом — выпендрежники?

Единственный человек, который тут выделывается — это ты. Еще раз напоминаю — ты написал сообщение в стиле «я в шоке, какие тут все глупые, вот смотри как все должно быть» и при этом умудрился облажаться не выполнив условие, которое написано 3 раза в 3х предложениях. Серьезно? Это насколько глупым и самовлюбленным нужно быть, что бы после этого вообще хоть что-то писать.

sswwssww

От меня ты услышал: выпендрежник, у тебя хреновый код.
И я называл тебя так обоснованно, в отличие от тебя.
Если по существу, твой код в одну строчку годиться только для выпендрежа, и все, точка. Его можно использовать только для того чтобы покрасоваться перед новичками. Если ты считаешь что так можно писать на проде или любом другом проекте — то ты глуп, объективно. Ты не можешь утверждать обратное, как бы тебе не хотелось выйти отсюда победителем, т.к. ты изначально был в проигрышной позиции. Не вижу смысла продолжать этот пустой диалог.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *