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



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
Повторяющиеся буквы
Задание: Создайте функцию, которая принимает одну строку и возвращает другую, в которой каждая буква исходной строки повторяется дважды.
Примечание: Все тестовые случаи содержат валидные строки. Не переживайте о пробелах, специальных символах или числах. Все эти символы валидны.
Примеры:
double_char("String") ➞ "SSttrriinngg" double_char("Hello World!") ➞ "HHeelllloo WWoorrlldd!!" double_char("1234!_ ") ➞ "11223344!!__ "
Варианты решения:
def double_char(txt): return ''.join([c * 2 for c in txt])
def double_char(txt): return ''.join(x*2 for x in txt)
def double_char(txt): result = '' for t in txt: result += t*2 return result
Подсчет повторений слов в тексте, деление строки на список слов
Для подсчета повторений слов в тексте необходимо научиться преобразовывать текст/сроку в список слов. Это можно сделать двумя способами:
-
Использовать метод строки str.split() и делить строку по пробелам между словами.
# исходная строка >>> line = 'Деление строки на список слов' # метод строки `str.split()` >>> words = line.split(' ') >>> words # ['Деление', 'строки', 'на', 'список', 'слов']
# исходная строка >>> line = 'Деление строки на список слов' # символ регулярных выражений `\b` >>> import re >>> words = re.split('\W', line) >>> words # ['Деление', 'строки', 'на', 'список', 'слов']
Подсчет повторений слов в тексте или символов в строке.
Подсчет повторений слов в тексте или символов в строке можно осуществить несколькими способами. Но для начала, если будем считать слова в тексте, необходимо этот текст подготовить, а именно очистить от знаков пунктуации и преобразовать его в список слов, как показано выше.
Для этого, возьмем готовый код замены пунктуации из подраздела «Удаление пунктуации из строки» и обернем в функцию text_clear() , далее получим из текста список слов и в цикле посчитаем сколько раз каждое слово встречается в исходном тексте.
def text_clear(text): """Удаление пунктуации""" import string for p in string.punctuation + '\n': if p in text: text = text.replace(p, '') return text def counter(list_element): """Счетчик повторений элементов последовательности""" # создаем словарь, где будем хранить элемент списка в качестве, # ключа, а количество его повторений будет значением count = <> # теперь считаем повторения элементов списка for element in list_element: if count.get(element, None): # если в словаре ключ со значением элемента списка # присутствует, то увеличиваем счетчик на 1 count[element] += 1 else: # если в словаре ключа со значением элемента # спитска НЕТ, то создаем ключ со значением 1 count[element] = 1 # сортируем словарь по количеству повторений слов в тексте sorted_values = sorted(count.items(), key=lambda tpl: tpl[1], reverse=True) return dict(sorted_values) # исходный текст >>> text = ('Подсчет повторений всех слов в тексте или повторений' . ' символов в тексте или символов в строке') # преобразовываем текст в нижний регистр # и удаляем всю пунктуацию >>> text = text_clear(text.lower()) # преобразовываем текст в список слов >>> list_word = text.split() >>> counter(list_word) # # 'подсчет': 1, 'всех': 1, 'слов': 1, 'строке': 1> # теперь считаем количество # повторений символов в строке >>> line = 'абракадабра' # строку в список символов >>> lst = list(line) >>> counter(lst) #
Быстрый способ подсчета повторений элементов в последовательности.
Конечно это все прекрасно работает и хороший пример для самообучения но здесь много кода и к тому же в Python во встроенном модуле collections есть класс Counter() для целей подсчета повторений элементов в последовательности.
Смотрим пример с collections.Counter для подсчета повторений символов в строке:
# считаем количество повторений символов в строке >>> line = 'абракадабра' # строку в список символов >>> lst = list(line) # импортируем счетчик >>> from collections import Counter # готово >>> dict(Counter(lst)) # # все символы, которые повторяются 2 и более раз k:v for k, v in Counter(lst).items() if v > 1> #
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Преобразование строки в число
- Строку в список, кортеж или множество символов
- Одинарные, двойные и тройные кавычки в строке Python
- Вывод специальных символов в строке Python «как есть»
- Объединение и повторение строк
- Индексирование строк
- Использование срезов строк
- Cрез строки Python от заданного символа/знака до конца строки
- Создание макета для печати базовыми методами строк
- Способы форматирования текстовых строк
- Подсчет повторений слов в тексте, деление строки на список слов
- Удаление слова из строки Python по фрагменту или шаблону
- Удаление пунктуации из строки
- Деление строки по заглавным буквам
- Создание отчетов и писем по шаблонам
Строки и символы. Как решить задачу с курса?
Дико стыдно, но я просто встал в тупик.
Прохожу курс Stepic по Python. И вот уже 5-ый день бьюсь над этой задачей. Десятки вариантов перепробовал. А не выходит. А дальше идти не могу по курсу, не хочу нерешенное оставлять позади.
Вот, собственно, задача:
Узнав, что ДНК не является случайной строкой, только что поступившие в Институт биоинформатики студенты группы информатиков предложили использовать алгоритм сжатия, который сжимает повторяющиеся символы в строке.
Кодирование осуществляется следующим образом:
s = ‘aaaabbсaa’ преобразуется в ‘a4b2с1a2’, то есть группы одинаковых символов исходной строки заменяются на этот символ и количество его повторений в этой позиции строки.
Напишите программу, которая считывает строку, кодирует её предложенным алгоритмом и выводит закодированную последовательность на стандартный вывод.
Sample Input 1:
aaaabbcaa
Sample Output 1:
a4b2c1a2
Sample Input 2:
abc
Sample Output 2:
a1b1c1
А вот на данный момент более-менее мое решение. Знаю, что надо сравнивать со следующим элементом строки, но все перерыл, нет ничего подобного, на мою самодеятельность PyCharm дает ошибки. Взгляните и просто подскажите пожалуйста, готовое решение не обязательно.
message = "aaaabbсaa" cnt = 1 for i in message: if i == message[1:-1]: cnt += 1 print(i, end='') else: print(i, end='') print(cnt, end='') cnt = 1
Выводит вот это: a1a1a1a1b1b1с1a1a1
- Вопрос задан более трёх лет назад
- 46317 просмотров
1 комментарий
Оценить 1 комментарий