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

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

  • автор:

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

Скачай курс
в приложении

Перейти в приложение
Открыть мобильную версию сайта

© 2013 — 2023. Stepik

Наши условия использования и конфиденциальности

Get it on Google Play

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 комментарий

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

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