Строки. Функции и методы строк
Итак, о работе со строками мы немного поговорили, теперь поговорим о функциях и методах строк.
Я постарался собрать здесь все строковые методы и функции, но если я что-то забыл — поправляйте.
Базовые операции
При вызове методов необходимо помнить, что строки в Python относятся к категории неизменяемых последовательностей, то есть все функции и методы могут лишь создавать новую строку.
: Поэтому все строковые методы возвращают новую строку, которую потом следует присвоить переменной.
Таблица «Функции и методы строк»
Функция или метод | Назначение |
---|---|
S = ‘str’; S = «str»; S = »’str»’; S = «»»str»»» | Литералы строк |
S = «s\np\ta\nbbb» | Экранированные последовательности |
S = r»C:\temp\new» | Неформатированные строки (подавляют экранирование) |
S = b»byte» | Строка байтов |
S1 + S2 | Конкатенация (сложение строк) |
S1 * 3 | Повторение строки |
S[i] | Обращение по индексу |
S[i:j:step] | Извлечение среза |
len(S) | Длина строки |
S.find(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер первого вхождения или -1 |
S.rfind(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер последнего вхождения или -1 |
S.index(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер первого вхождения или вызывает ValueError |
S.rindex(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер последнего вхождения или вызывает ValueError |
S.replace(шаблон, замена[, maxcount]) | Замена шаблона на замену. maxcount ограничивает количество замен |
S.split(символ) | Разбиение строки по разделителю |
S.isdigit() | Состоит ли строка из цифр |
S.isalpha() | Состоит ли строка из букв |
S.isalnum() | Состоит ли строка из цифр или букв |
S.islower() | Состоит ли строка из символов в нижнем регистре |
S.isupper() | Состоит ли строка из символов в верхнем регистре |
S.isspace() | Состоит ли строка из неотображаемых символов (пробел, символ перевода страницы (‘\f’), «новая строка» (‘\n’), «перевод каретки» (‘\r’), «горизонтальная табуляция» (‘\t’) и «вертикальная табуляция» (‘\v’)) |
S.istitle() | Начинаются ли слова в строке с заглавной буквы |
S.upper() | Преобразование строки к верхнему регистру |
S.lower() | Преобразование строки к нижнему регистру |
S.startswith(str) | Начинается ли строка S с шаблона str |
S.endswith(str) | Заканчивается ли строка S шаблоном str |
S.join(список) | Сборка строки из списка с разделителем S |
ord(символ) | Символ в его код ASCII |
chr(число) | Код ASCII в символ |
S.capitalize() | Переводит первый символ строки в верхний регистр, а все остальные в нижний |
S.center(width, [fill]) | Возвращает отцентрованную строку, по краям которой стоит символ fill (пробел по умолчанию) |
S.count(str, [start],[end]) | Возвращает количество непересекающихся вхождений подстроки в диапазоне [начало, конец] (0 и длина строки по умолчанию) |
S.expandtabs([tabsize]) | Возвращает копию строки, в которой все символы табуляции заменяются одним или несколькими пробелами, в зависимости от текущего столбца. Если TabSize не указан, размер табуляции полагается равным 8 пробелам |
S.lstrip([chars]) | Удаление пробельных символов в начале строки |
S.rstrip([chars]) | Удаление пробельных символов в конце строки |
S.strip([chars]) | Удаление пробельных символов в начале и в конце строки |
S.partition(шаблон) | Возвращает кортеж, содержащий часть перед первым шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий саму строку, а затем две пустых строки |
S.rpartition(sep) | Возвращает кортеж, содержащий часть перед последним шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий две пустых строки, а затем саму строку |
S.swapcase() | Переводит символы нижнего регистра в верхний, а верхнего – в нижний |
S.title() | Первую букву каждого слова переводит в верхний регистр, а все остальные в нижний |
S.zfill(width) | Делает длину строки не меньшей width, по необходимости заполняя первые символы нулями |
S.ljust(width, fillchar=» «) | Делает длину строки не меньшей width, по необходимости заполняя последние символы символом fillchar |
S.rjust(width, fillchar=» «) | Делает длину строки не меньшей width, по необходимости заполняя первые символы символом fillchar |
S.format(*args, **kwargs) | Форматирование строки |
Для вставки кода на Python в комментарий заключайте его в теги
Вырезать часть строки по разделителю [закрыт]
Учебные задания допустимы в качестве вопросов только при условии, что вы пытались решить их самостоятельно перед тем, как задать вопрос. Пожалуйста, отредактируйте вопрос и укажите, что именно вызвало у вас трудности при решении задачи. Например, приведите код, который вы написали, пытаясь решить задачу
На вход программе подается строка текста, в которой буква «h» встречается минимум два раза. Как удалить из этой строки первое и последнее вхождение буквы «h», а также все символы, находящиеся между ними? Я сделала вот так:
s = input() total = 0 for i in s: total += s.count(i) print(total) #или print max(total)
но я не понимаю как сделать, чтобы для каждого символа создавался счетчик Я не смогла решить эту задачу, помогите пожалуйста!
На вход программе подается строка текста. Напишите программу, которая выводит на экран символ, который появляется наиболее часто. Формат входных данных На вход программе подается строка текста. Текст может содержать строчные и заглавные буквы английского и русского алфавита, а также цифры. Формат выходных данных Программа должна вывести символ, который появляется наиболее часто. Примечание 1. Если таких символов несколько, следует вывести последний по порядку символ. Примечание 2. Следует различать заглавные и строчные буквы, а также буквы русского и английского алфавита.
воспользуйтесь кнопкой "править" под вопросом. Вопрос должен быть сформулирован в теле вопроса, а не в комментариях.
2 ответа 2
Можно найти индексы символа 'h' в исходной строке:
sep_indexes = [pos for pos, char in enumerate(text) if char == separator]
и соединить то, что перед первым 'h' с тем, что после последнего 'h':
begin = text[:sep_indexes[0]] end = text[sep_indexes[-1]+1:] result = begin + end
def cut_text(text, separator): sep_indexes = [pos for pos, char in enumerate(text) if char == separator] begin = text[:sep_indexes[0]] end = text[sep_indexes[-1]+1:] return begin + end text = 'foohbarhspam' separator = 'h' new_text = cut_text(text, separator) print(new_text)
Можно найти первое ( text.find('h') ) и последнее ( text.rfind('h') ) вхождение символа h в строку. Затем отрезать от строки начало до первого символа и конец после последнего. Склеить их:
text = input() # первая 'h' последняя 'h' # -------------- --------------- print(text[:text.find('h')] + text[text.rfind('h') + 1:]) # --------------------- -------------------------- # начало текста до 'h' конец текста после 'h'
Более изощрённое решение - регулярное выражение h.*h . Символы h сопоставятся сами с собой в строке. .* - означает "любое количество любых символов".
Регулярные выражения жадные: они ищут самый длинный фрагмент для сопоставления. Это значит что первая h в выражении сопоставится с первым вхождением буквы h в строке, последняя h в выражении - с последней h в строке.
re.sub заменяет найденное сопоставление на второй свой аргумент. Второй аргумент - пустая строка, то есть мы выбрасываем то что нашли:
import re text = input() print(re.sub('h.*h', '', text))
Оба варианта работают одинаково (если в строке есть хотя бы две h ):