Что делает str s
Перейти к содержимому

Что делает str s

  • автор:

Строки. Функции и методы строк

Python 3 логотип

Итак, о работе со строками мы немного поговорили, теперь поговорим о функциях и методах строк.

Я постарался собрать здесь все строковые методы и функции, но если я что-то забыл — поправляйте.

Базовые операции

  • Конкатенация (сложение)

При вызове методов необходимо помнить, что строки в 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 в комментарий заключайте его в теги

Что делает str s

Строка считывается со стандартного ввода функцией input() . Напомним, что для двух строк определена операция сложения (конкатенации), также определена операция умножения строки на число.

Строка состоит из последовательности символов. Узнать количество символов (длину строки) можно при помощи функции len .

Любой другой объект в Питоне можно перевести к строке, которая ему соответствует. Для этого нужно вызвать функцию str() , передав ей в качестве параметра объект, переводимый в строку.

На самом деле каждая строка, с точки зрения Питона, — это объект класса str. Чтобы получить по объекту другой объект другого класса, как-то ему соответствующий, можно использовать функцию приведения. Имя этой функции совпадает с именем класса, к которому мы приводим объект. (Для знатоков: эта функция — это конструктор объектов данного класса.) Пример: int — класс для целых чисел. Перевод строки в число осуществляется функцией int() .

What is the answer? 42
s = input() print(len(s)) t = input() number = int(t) u = str(number) print(s * 3) print(s + ' ' + u)

2. Срезы (slices)

Срез (slice) — извлечение из данной строки одного символа или некоторого фрагмента подстроки или подпоследовательности.

Есть три формы срезов. Самая простая форма среза: взятие одного символа строки, а именно, S[i] — это срез, состоящий из одного символа, который имеет номер i . При этом считается, что нумерация начинается с числа 0. То есть если , то , , , , .

Заметим, что в Питоне нет отдельного типа для символов строки. Каждый объект, который получается в результате среза S[i] — это тоже строка типа str.

Номера символов в строке (а также в других структурах данных: списках, кортежах) называются индексом.

Если указать отрицательное значение индекса, то номер будет отсчитываться с конца, начиная с номера -1 . То есть , , , , .

Или в виде таблицы:

Строка S H e l l o
Индекс S[0] S[1] S[2] S[3] S[4]
Индекс S[-5] S[-4] S[-3] S[-2] S[-1]

Если же номер символа в срезе строки S больше либо равен len(S) , или меньше, чем -len(S) , то при обращении к этому символу строки произойдет ошибка IndexError: string index out of range .

Срез с двумя параметрами: S[a:b] возвращает подстроку из b - a символов, начиная с символа c индексом a , то есть до символа с индексом b , не включая его. Например, S[1:4] == 'ell' , то же самое получится если написать S[-4:-1] . Можно использовать как положительные, так и отрицательные индексы в одном срезе, например, S[1:-1] — это строка без первого и последнего символа (срез начинается с символа с индексом 1 и заканчиватеся индексом -1, не включая его).

При использовании такой формы среза ошибки IndexError никогда не возникает. Например, срез S[1:5] вернет строку 'ello' , таким же будет результат, если сделать второй индекс очень большим, например, S[1:100] (если в строке не более 100 символов).

Если опустить второй параметр (но поставить двоеточие), то срез берется до конца строки. Например, чтобы удалить из строки первый символ (его индекс равен 0), можно взять срез S[1:] . Аналогично если опустить первый параметр, то можно взять срез от начала строки. То есть удалить из строки последний символ можно при помощи среза S[:-1] . Срез S[:] совпадает с самой строкой S .

Любые операции среза со строкой создают новые строки и никогда не меняют исходную строку. В Питоне строки вообще являются неизменяемыми, их невозможно изменить. Можно лишь в старую переменную присвоить новую строку.

На самом деле в питоне нет и переменных. Есть лишь имена, которые связаны с какими-нибудь объектами. Можно сначала связать имя с одним объектом, а потом — с другим. Можно несколько имён связать с одним и тем же объектом.

Если задать срез с тремя параметрами S[a:b:d] , то третий параметр задает шаг, как в случае с функцией range , то есть будут взяты символы с индексами a , , и т. д. При задании значения третьего параметра, равному 2, в срез попадет кажый второй символ, а если взять значение среза, равное -1 , то символы будут идти в обратном порядке. Например, можно перевернуть строку срезом S[::-1] .

s = 'abcdefg' print(s[1]) print(s[-1]) print(s[1:3]) print(s[1:-1]) print(s[:3]) print(s[2:]) print(s[:-1]) print(s[::2]) print(s[1::2]) print(s[::-1])

Строки¶

Строки в Python - упорядоченные последовательности символов, используемые для хранения и представления текстовой информации, поэтому с помощью строк можно работать со всем, что может быть представлено в текстовой форме.

Литералы строк¶

Работа со строками в Python очень удобна. Существует несколько литералов строк, которые мы сейчас и рассмотрим.

Строки в апострофах и в кавычках¶

S = 'spam"s' S = "spam's" 

Строки в апострофах и в кавычках - одно и то же. Причина наличия двух вариантов в том, чтобы позволить вставлять в литералы строк символы кавычек или апострофов, не используя экранирование.

Служебные символы¶

Экранированные последовательности позволяют вставить символы, которые сложно ввести с клавиатуры.

Экранированная последовательность Назначение
\n Перевод строки
\a Звонок
\b Забой
\f Перевод страницы
\r Возврат каретки
\t Горизонтальная табуляция
\v Вертикальная табуляция
\N

Идентификатор ID базы данных Юникода
\uhhhh 16-битовый символ Юникода в 16-ричном представлении
\Uhhhh… 32-битовый символ Юникода в 32-ричном представлении
\xhh 16-ричное значение символа
\ooo 8-ричное значение символа
\0 Символ Null (не является признаком конца строки)

"Сырые" строки¶

Если перед открывающей кавычкой стоит символ r (в любом регистре), то механизм экранирования отключается.

S = r'C:\newt.txt' 

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

1 2 3
S = r'\n\n\\'[:-1] S = r'\n\n' + '\\' S = '\\n\\n' 

Строки в тройных апострофах или кавычках¶

Главное достоинство строк в тройных кавычках в том, что их можно использовать для записи многострочных блоков текста. Внутри такой строки возможно присутствие кавычек и апострофов, главное, чтобы не было трех кавычек подряд.

1 2 3 4 5 6 7 8 9
>>> c = '''это очень большая . строка, многострочный . блок текста''' >>> c 'это очень большая\nстрока, многострочный\nблок текста' >>> print(c) это очень большая строка, многострочный блок текста 

Функции и методы строк¶

Конкатенация (сложение)¶

1 2 3 4
>>> S1 = 'spam' >>> S2 = 'eggs' >>> print(S1 + S2) 'spameggs' 

Дублирование строки¶

>>> print('spam' * 3) spamspamspam 

Длина строки (функция len)¶

>>> len('spam') 4 

Доступ по индексу¶

1 2 3 4 5 6 7
>>> S = 'spam' >>> S[0] 's' >>> S[2] 'a' >>> S[-2] 'a' 

Как видно из примера, в Python возможен и доступ по отрицательному индексу, при этом отсчет идет от конца строки.

Извлечение среза¶

Оператор извлечения среза: [X:Y] . X – начало среза, а Y – окончание;

символ с номером Y в срез не входит. По умолчанию первый индекс равен 0 , а второй - длине строки.

 1 2 3 4 5 6 7 8 9 10 11
>>> s = 'spameggs' >>> s[3:5] 'me' >>> s[2:-2] 'ameg' >>> s[:6] 'spameg' >>> s[1:] 'pameggs' >>> s[:] 'spameggs' 

Кроме того, можно задать шаг, с которым нужно извлекать срез.

1 2 3 4 5 6
>>> s[::-1] 'sggemaps' >>> s[3:5:-1] '' >>> s[2::2] 'aeg' 

Другие функции и методы строк¶

При вызове методов необходимо помнить, что строки в Python относятся к категории неизменяемых последовательностей, то есть все функции и методы могут лишь создавать новую строку.

1 2 3 4 5 6 7 8 9
>>> s = 'spam' >>> s[1] = 'b' Traceback (most recent call last): File "", line 1, in s[1] = 'b' TypeError: 'str' object does not support item assignment >>> s = s[0] + 'b' + s[2:] >>> s 'sbam' 

Поэтому все строковые методы возвращают новую строку, которую потом следует присвоить переменной.

Функция или метод Назначение
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) Форматирование строки

Форматирование строк¶

Иногда (а точнее, довольно часто) возникают ситуации, когда нужно сделать строку, подставив в неё некоторые данные, полученные в процессе выполнения программы (пользовательский ввод, данные из файлов и т. д.). Подстановку данных можно сделать с помощью форматирования строк. Форматирование можно сделать с помощью оператора % , либо с помощью метода format .

Если для подстановки требуется только один аргумент, то значение - сам аргумент:

>>> 'Hello, <>!'.format('Vasya') 'Hello, Vasya!' 

А если несколько, то значениями будут являться все аргументы со строками подстановки (обычных или именованных):

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
>>> ' , , '.format('a', 'b', 'c') 'a, b, c' >>> '<>, <>, <>'.format('a', 'b', 'c') 'a, b, c' >>> ' , , '.format('a', 'b', 'c') 'c, b, a' >>> ' , , '.format(*'abc') 'c, b, a' >>> ' '.format('abra', 'cad') 'abracadabra' >>> 'Coordinates: , '.format(latitude='37.24N', longitude='-115.81W') 'Coordinates: 37.24N, -115.81W' >>> coord = 'latitude': '37.24N', 'longitude': '-115.81W'> >>> 'Coordinates: , '.format(**coord) 'Coordinates: 37.24N, -115.81W' 

Однако метод format умеет большее. Вот его синтаксис:

1 2 3 4
поле замены ::= "" имя поля ::= arg_name ("." имя атрибута | "[" индекс "]")* преобразование ::= "r" (внутреннее представление) | "s" (человеческое представление) спецификация ::= см. ниже 
1 2 3 4
>>> "Units destroyed: ".format(players = [1, 2, 3]) 'Units destroyed: 1' >>> "Units destroyed: ".format(players = ['1', '2', '3']) "Units destroyed: '1'" 

Теперь спецификация формата:

1 2 3 4 5 6 7 8
спецификация ::= [[fill]align][sign][#][0][width][,][.precision][type] заполнитель ::= символ кроме '' выравнивание ::= "" | "=" | "^" знак ::= "+" | "-" | " " ширина ::= integer точность ::= integer тип ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%" 

Выравнивание производится при помощи символа-заполнителя. Доступны следующие варианты выравнивания:

Флаг Значение
Символы-заполнители будут справа (выравнивание объекта по левому краю) (по умолчанию).
> выравнивание объекта по правому краю.
= Заполнитель будет после знака, но перед цифрами. Работает только с числовыми типами.
^ Выравнивание по центру.

Опция "знак" используется только для чисел и может принимать следующие значения:

Флаг Значение
+ Знак должен быть использован для всех чисел.
- - для отрицательных, ничего для положительных.
Пробел - для отрицательных, пробел для положительных.

Поле "тип" может принимать следующие значения:

Тип Значение
d , i , u Десятичное число.
o Число в восьмеричной системе счисления.
x Число в шестнадцатеричной системе счисления (буквы в нижнем регистре).
X Число в шестнадцатеричной системе счисления (буквы в верхнем регистре).
e Число с плавающей точкой с экспонентой (экспонента в нижнем регистре).
E Число с плавающей точкой с экспонентой (экспонента в верхнем регистре).
f , F Число с плавающей точкой (обычный формат).
g Число с плавающей точкой. с экспонентой (экспонента в нижнем регистре), если она меньше, чем -4 или точности, иначе обычный формат.
G Число с плавающей точкой. с экспонентой (экспонента в верхнем регистре), если она меньше, чем -4 или точности, иначе обычный формат.
c Символ (строка из одного символа или число - код символа).
s Строка.
% Число умножается на 100 , отображается число с плавающей точкой, а за ним знак % .

И напоследок, несколько примеров:

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
>>> coord = (3, 5) >>> 'X: ; Y: '.format(coord) 'X: 3; Y: 5' >>> "repr() shows quotes: ; str() doesn't: ".format('test1', 'test2') "repr() shows quotes: 'test1'; str() doesn't: test2" >>> ' '.format('left aligned') 'left aligned ' >>> '30>'.format('right aligned') ' right aligned' >>> ' '.format('centered') ' centered ' >>> ' '.format('centered') # use '*' as a fill char '***********centered***********' >>> ' ; '.format(3.14, -3.14) # show it always '+3.140000; -3.140000' >>> ' ; '.format(3.14, -3.14) # show a space for positive numbers ' 3.140000; -3.140000' >>> ' ; '.format(3.14, -3.14) # show only the minus -- same as '; ' '3.140000; -3.140000' >>> # format also supports binary numbers >>> "int: ; hex: ; oct: ; bin: ".format(42) 'int: 42; hex: 2a; oct: 52; bin: 101010' >>> # with 0x, 0o, or 0b as prefix: >>> "int: ; hex: ; oct: ; bin: ".format(42) 'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010' >>> points = 19.5 >>> total = 22 >>> 'Correct answers: '.format(points/total) 'Correct answers: 88.64%' 

str (строка)

Строка — базовый тип представляющий из себя неизменяемую последовательность символов; str от «string» — «строка».

obj -- Объект, который требуется привести к строке, либо получить для него «неформальное» строковое представление.

Строки относятся к неизменяемым последовательностям.

Начиная с +py3.0 имеется в виду последовательность кодовых точек Unicode (соответствует типу unicode в предыдущих версиях Python).

До -py3.0 последовательность представляла из себя строку байт (поддерживает ASCII).

На заметку

Поскольку в языке нет типа для одиночного символа (character, char), то обращение к строке при помощи индекса: my_str[1] — возвращает новую строку с символом по этому индексу.

Строковые литералы могут быть записаны разными способами:

 # Одиночные кавычки. Часто встречаемый вариант записи. 
my_str = 'а внутри "можно" поместить обычные'

# Кавычки.
my_str = "а внутри 'можно' поместить одиночные"

# Три одиночных кавычки. Удобно для записей в несколько строк
my_str = '''В трёх одиночных
кавычках'''

# Тройные кавычки. Общепринятый способ для строк документации.
my_str = """Three double quotes"""

Строковые литералы, содержащие промеж себя только пробел объединяются в единую строку:

 ('Кот' 'обус') == 'Котобус'
Приведение к строке

Другие типы могут быть приведены к строке при помощи конструктора str() : str(obj) .

 str(10) # '10' 
str(len) # ''

Таким образом можно получить «неформальное» строковое представление объектов. Для пользовательских типов такое представление может быть определено в специализированном методе __str__.

В случае, если получить строковое представление не удалось, производится попытка получить «формальное» представление (см. repr).

Синонимы поиска: str (строка), строки, строковые методы, функции для строк, преобразование в строку, методы строк, char

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

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