Метод последовательности count() в Python
Метод sequence.count() позволяет узнать сколько раз указанный элемент x появился в последовательности sequence .
Результатом будет целое число, показывающее количество вхождений элемента x в последовательность sequence .
Другими словами, сколько раз указанный элемент x появляется в последовательности или сколько раз встречается буква/символ/подстрока в какой либо строке.
Элементом может быть символ или подстрока, если последовательность строка. Число, если это числовая последовательность и т. д.
Эта операция поддерживаются большинством типов последовательностей, как изменяемых, так и неизменяемых.
Примечание: Множества set и frozenset не поддерживает метод .count() , т. к. это неупорядоченная коллекция без повторяющихся элементов.
Внимание: Для тех, кто ищет, как посчитать количество повторений элементов в списке или количество одинаковых слов в тексте/строке:
- Подсчет повторений слов в тексте;
- Класс Counter() модуля collections .
Примеры подсчета количества появлений элемента в последовательности.
>>> x = 'кукуруза' >>> x.count('у') # 3 >>> x.count('ку') # 2 >>> x.count('o') # 0 >>> x = [2, 1, 3, 1, 6, 1, 8, 8, 98, 11] >>> x.count(1) # 3 >>> x.count(8) # 2 >>> x.count(10) # 0
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Проверка существования значения в последовательности Python
- Конкатенация (сложение) последовательностей
- Увеличение последовательности в N раз
- Получение значения элемента по индексу sequence[i]
- Получение среза sequence[i:j]
- Получение среза с заданным шагом sequence[i:j:k]
- Вычисление длины последовательности
- Наименьшее значение последовательности Python
- Наибольшее значение в последовательности Python
- Метод последовательности index()
- Метод последовательности count()
Как посчитать сколько раз символ встречается в строке? [закрыт]
Учебные задания допустимы в качестве вопросов только при условии, что вы пытались решить их самостоятельно перед тем, как задать вопрос. Пожалуйста, отредактируйте вопрос и укажите, что именно вызвало у вас трудности при решении задачи. Например, приведите код, который вы написали, пытаясь решить задачу
Закрыт 6 лет назад .
Дана строка s = ‘good shene’, надо создать словарь, где для всех символов, встречающихся в строке, хранится число: сколько раз символ встретился в строке. Для решения задачи надо использовать генератор.
Отслеживать
683 2 2 серебряных знака 15 15 бронзовых знаков
задан 25 окт 2017 в 19:55
goggle lesha goggle lesha
41 1 1 золотой знак 1 1 серебряный знак 4 4 бронзовых знака
‘abcabcabd’.count(‘c’) или ‘abcabcabd’.count(‘abc’) . А вообще такие вещи гуглом за 10 секунд находятся. 😉
25 окт 2017 в 20:00
@MaxU в ответ его! 🙂
25 окт 2017 в 20:06
@ВладимирМартьянов, добавил на тот случай если кто-то из гугла сюда прийдет.
25 окт 2017 в 20:09
@MaxU строка уже задана, например для строки s = ‘good shene’ создать словарь, где для всех символов, встречающихся в строке, хранится число: сколько раз символ встретился в строке. нужно использовать генераторы, чтобы решить задачу в одну строку.
25 окт 2017 в 20:12
@gogglelesha, нажмите кнопку «править» и исправьте вопрос.
25 окт 2017 в 20:13
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Ответ на вопрос после правки:
In [17]: s Out[17]: 'good shene' In [18]: Out[18]:
Классический вариант решения (если нет обязательного условия использовать генераторы):
In [23]: from collections import Counter In [24]: c = Counter(s) In [25]: c Out[25]: Counter() In [26]: c.most_common(1) Out[26]: [('o', 2)]
Ответ на вопрос до правки:
In [3]: 'abcabcabd'.count('c') Out[3]: 2 In [4]: 'abcabcabd'.count('abc') Out[4]: 2 In [5]: 'abcabcabd'.count('abd') Out[5]: 1
тоже самое можно проделать с переменными:
In [6]: s1 = 'aaabbbcccdxyz' In [7]: s2 = 'a' In [8]: s1.count(s2) Out[8]: 3 In [9]: s1.count('xyz') Out[9]: 1
Сколько раз буква встречается в строке
Программа принимает на вход строку и букву. Надо определить (с использованием рекурсии), сколько раз данная буква встречается в строке.
Решение задачи
- Принимаем на вход строку и букву, записываем их в разные переменные.
- Передаем эти переменные в качестве аргументов в рекурсивную функцию.
- В качестве базы рекурсии примем условие, что строка является непустой.
- Если строка является непустой, то работа функции продолжается и мы смотрим, совпадает ли первый символ строки с проверяемой буквой, или нет. Если совпадает, то мы увеличиваем счетчик на единицу.
- Далее мы передаем строку без первой буквы снова в функцию, и все повторяется заново.
- Когда строка станет пустой, функция вернет нам количество вхождений буквы в строке. Выведем этот результат на экран.
- Конец.
Исходный код
Ниже дан исходный код программы для рекурсивного определения количества вхождений буквы в строку. Результаты работы программы также даны ниже.
def check(string, ch): if not string: return 0 elif string[0] == ch: return 1 + check(string[1:], ch) else: return check(string[1:], ch) string = raw_input("Введите строку:") ch = raw_input("Введите букву для проверки:") print("Количество вхождений:") print(check(string, ch))
Объяснение работы программы
- Пользователь вводит строку и букву, которые записываются в отдельные переменные string и ch .
- Далее эти переменные передаются в качестве аргументов в рекурсивную функцию check() .
- Для того чтобы функция продолжала свою работу, необходимо, чтобы строка была непустой. Если строка является пустой, функция завершает свою работу и возвращает 0 .
- На следующем шаге рекурсивная функция проверяет, совпадает ли буква в переменной ch с первой буквой в строке. Если совпадает, то в выходное значение добавляется 1 , к которой прибавляется функция check() , в которой в качестве аргумента передается наша строка, но уже без первой буквы. Если нет, то просто вызывается функция check() , где в качестве аргумента также строка без первой буквы.
- Так повторяется до тех пор, пока строка не станет пустой.
- После этого результат выводится на экран.
Результаты работы программы
Пример 1: Введите строку:abcdab Введите букву для проверки:b Количество вхождений: 2 Пример 2: Введите строку:hello world Введите букву для проверки:l Количество вхождений: 3
Как найти самый частый символ в строке?
Смотрел готовые решения, но ничего подходящего не нашел, либо они были сложными и надо было подключать модуль Counter.
Можно ли как-то проще решить?
- Вопрос задан более трёх лет назад
- 13827 просмотров
2 комментария
Простой 2 комментария
Сергей Горностаев @sergey-gornostaev Куратор тега Python
Три строки, включая импорт Counter — это сложно?
VishenkaNaTorte @VishenkaNaTorte Автор вопроса
Сергей Горностаев, Я лишь говорю про те решения, которые я видел. Наверняка есть другой способ
Решения вопроса 1
yay ✌️ t.me/kshnkvn
foo = 'cccc8923jbbdkcc' max_item = lambda s: max(t := , key=t.get) max_item(foo) # 'c'
P.S. Это будет работать только для Python3.8+
Ответ написан более трёх лет назад
Комментировать
Нравится 4 Комментировать
Ответы на вопрос 4
string = 'fgfhsadsssssllfd' counted_chars = <> for char in string: if char in counted_chars: counted_chars[char] += 1 else: counted_chars[char] = 1 print(max(counted_chars))
from collections import defaultdict string = 'fgfhsadsssssllfd' counted_chars = defaultdict(int) for char in string: counted_chars[char] += 1 print(max(counted_chars))
p.s.: я мягко говоря в шоке от того что тут предлагают все возможные заковыристые(привет дзен Python ) и не работающие даже на p.s. 2: лучше юзать Counter
Ответ написан более трёх лет назад
Нравится 1 14 комментариев
От шока условия задачи не прочитал?
Ivan Yakushenko, когда куратор тега Python дает имя лямбда функциям и не такое проморгаешь.
sswwssww, в какой из вселенных это считается плохим?
Ivan Yakushenko, во вселенной где есть PEP 8, например.
sswwssww, ой, прости пожалуйста, как я мог забыть за pep, это же спецификации, а не соглашение и его нужно придерживаться всегда и везде.
P.S. Только не обижайся, у меня нет цели тебя оскорбить или задеть, просто автор «смотрел готовые решения» и они ему не подошли, предложил вариант с учетом некоторого нововведения в python 3.8 и раз ему оно подошло — хорошо и не более.
P.S.2. Не нужно умничать, когда сам не в состоянии прочитать условие, которое в 3х предложениях повторяется 3 раза.
P.S.3. Не нужно обвинять кого то в своей собственной ошибке.
Ivan Yakushenko, твой код херня полная, вот что я хочу сказать. Он нарушает дзен Python и PEP 8, доставляет проблемы при просмотре трассировок ошибок, еще и медленно работает за счет избыточности. Код должен быть таким чтобы ты просто читал его как текст, а не ребусы решал. Поверь, никто не хочет ковыряться в выпендреже на 1 строке, который еще и работает только в 3.8+ . «Не нужно обвинять кого то в своей собственной ошибке.» — к чему это вообще сказано, хрен его знает.
p.s. Как думаешь, почему лямбда функции называют анонимными?
p.s. 2. PEP 8 нужно придерживаться везде где это можно сделать, этот пример явно относится к этой категории.
p.s. 3. Прости, добавил вызов одной функции специально для тебя, теперь соответствует вопросу.
string = 'fgfhsadsssssllfd' counted_chars = <> for char in string: if char in counted_chars: counted_chars[char] += 1 else: counted_chars[char] = 1 print(max(counted_chars))
Он нарушает дзен Python и PEP 8
Вообще плевать, строка написана из спортивного интереса и не более.
еще и медленно работает за счет избыточности
Да, точно, разница в N наносекунд — это просто жесть как долго. Че еще расскажешь?
Код должен быть таким чтобы ты просто читал его как текст, а не ребусы решал
Код должен быть таким, что бы выполнялось определенное задание в рамках условий, остальное — шашечки оговариваемые в частных случаях.
Поверь, никто не хочет ковыряться в выпендреже на 1 строке
Ты прям опрос проводил среди всех людей связанных с программированием и прям 100% из них без исключительно этого не хочет?
к чему это вообще сказано, хрен его знает
К тому, что «когда куратор тега Python дает имя лямбда функциям и не такое проморгаешь.». У тебя помимо невнимательности еще и память так себе.
этот пример явно относится к этой категории
И какие же «явные» особенности этого примера причисляют его к этой категории?
Прости, добавил вызов одной функции специально для тебя, теперь соответствует вопросу.
Не, не прощаю, не люблю поговорку «лучше поздно, чем никогда», раз облажался, так прими это с гордостью.
Вообще плевать
— дальше не читал.
sswwssww, врешь, читал, просто тебе ответить нечего. Как итог данного замечательного диалога ты — невнимательный, тщеславный врунишка.
Ivan Yakushenko, я это написал к тому, что нет смысла говорить о том как должен выглядеть хороший код человеку которому «вообще плевать» на код. «Дальше не читал» — это выражение-мем означающее не то что реально не читал, а то что можно не читать. Так что твои обвинения безосновательны.
человеку которому «вообще плевать» на код
Процитируй мне моё сообщение, где мне «плевать на код». Я так понимаю к уже определенным твоим качествам стоит добавить еще и плохое зрение.
это выражение-мем означающее не то что реально не читал
Спасибо за экскурс в пубертатную мемологию, но я и дальше продолжу придерживаться нормам русского языка хотя бы в рамках своих знаний, особенно когда общаюсь с незнакомым человеком. Простые правила приличия, знаешь ли.
Так что твои обвинения безосновательны.
Процитируй мне моё сообщение, где я тебя хоть в чем то обвиняю.
Просто напоминаю — это не я, а ты написал ответ в стиле «смотрите какой я крутой, а все дурачки», но при этом облажался с решением. Ха.
И что бы не опускать тему про pep — это всего лишь общепринятое универсальное соглашение, но универсальность не покрывает специфику, соответственно в некоторых командах/компания данное соглашение обсуждается и некоторые пункты, а иногда и многие могут опускаться в угоду различным обстоятельствам.
Ivan Yakushenko, тебе плевать на скорость работы кода, плевать на удобочитаемость, плевать на pep8, плевать на дзен Python, плевать на то что твой код не работает на любых версиях ниже 3.8.
Ты обвинил меня во вранье как минимум.
Дружок, я знаю что такое pep8, ты можешь писать хоть 1000 символов на 1 линии и кричать что пеп это лишь советы, но попробуй пописать в таком стиле в любой более менее уважающей себя компании, поверь тебя вышвырнут в первый же день.
Русский язык это лишь инструмент выражения мыслей, и помимо этого инструмента у людей есть такие как сарказм, ирония и т.д., печально если ты не умеешь ими оперировать и воспринимаешь любой текст — буквально.
Забавно что человек пишущий уродливый код ради выпендрежа обвиняет меня выпендреже.
Ты подаёшь плохой пример новичкам, я тебе на это указал, вот и все, к чему раздувать тут комменты.
Забавно что человек пишущий уродливый код ради выпендрежа обвиняет меня выпендреже.
Выключай фантазию, она тебя не туда ведет. Я написал всего одну строчку кода (3, если быть максимально точным), исходя из посыла автора в контексте того, что он уже что то гуглил и пробовал и «стандартные» решения, почему то, ему не подошли. Это единственная причина по которой была написана тут это строчка. Все, больше я не написал ни слова, кроме единственного условия, при котором эта строчка будет работать. С чего ты делаешь выводы про мой «выпендреж» мне не ясно. Или по твоему все люди, которые увлекаются код-гольфингом — выпендрежники?
Единственный человек, который тут выделывается — это ты. Еще раз напоминаю — ты написал сообщение в стиле «я в шоке, какие тут все глупые, вот смотри как все должно быть» и при этом умудрился облажаться не выполнив условие, которое написано 3 раза в 3х предложениях. Серьезно? Это насколько глупым и самовлюбленным нужно быть, что бы после этого вообще хоть что-то писать.
Ты обвинил меня во вранье как минимум.
Да, точно, я это сделал. Извиняюсь что забыл, что ты солгал.
но попробуй пописать в таком стиле в любой более менее уважающей себя компании, поверь тебя вышвырнут в первый же день
Если у тебя не хватает мозгов разделять код-гольфинг и работу в любом её проявлении, то мне тебя искренне жаль.
тебе плевать на скорость работы кода, плевать на удобочитаемость, плевать на pep8, плевать на дзен Python, плевать на то что твой код не работает на любых версиях ниже 3.8
Можешь, пожалуйста, расписать мне твою логическую цепочку на основании которой ты сделал столько многозначительных выводов всего по 1 строчке кода?
Процитируй мне моё сообщение, где мне «плевать на код». Я так понимаю к уже определенным твоим качествам стоит добавить еще и плохое зрение.
Он нарушает дзен Python и PEP 8
Вообще плевать, строка написана из спортивного интереса и не более.
Просто напоминаю — это не я, а ты написал ответ в стиле «смотрите какой я крутой, а все дурачки», но при этом облажался с решением. Ха.
— ты сам приплел мне то что я не писал и сам же отвечаешь на это, забавно.
ты написал сообщение в стиле «я в шоке, какие тут все глупые, вот смотри как все должно быть» и при этом умудрился облажаться не выполнив условие
— x2. НЕ ВЫПОЛНИВ УСЛОВИЕ!11 ужас, забыл добавить max() к выводу, ЭТО ЖЕ ВООБЩЕ В КОРНЕ ВСЕ МЕНЯЕТ!!1 НУЖНО ВСЮ ПРОГРАММУ ПЕРЕПИСЫВАТЬ.
Если подводить итоги, ты называл меня: невнимательным, тщеславным, врунишкой, глупым, самовлюбленным, у меня плохое зрение и память.
Цитируем тебя же, до этого:
Только не обижайся, у меня нет цели тебя оскорбить или задеть
От меня ты услышал: выпендрежник, у тебя хреновый код.
И я называл тебя так обоснованно, в отличие от тебя.
Если по существу, твой код в одну строчку годиться только для выпендрежа, и все, точка. Его можно использовать только для того чтобы покрасоваться перед новичками. Если ты считаешь что так можно писать на проде или любом другом проекте — то ты глуп, объективно. Ты не можешь утверждать обратное, как бы тебе не хотелось выйти отсюда победителем, т.к. ты изначально был в проигрышной позиции. Не вижу смысла продолжать этот пустой диалог.