Строки в Python: Создание, доступ, форматирование и методы манипуляции
Создание строк
Строки — одни из самых популярных типов в Python. Создаются заключением символов в кавычки. Одинарные и двойные кавычки эквивалентны. Создание — простое присваивание:
var1 = 'Hello World!' var2 = "Python Programming"
Доступ к значениям в строках
В Python нет отдельного типа символа; символ — это строка длины 1, то есть подстрока.
Для доступа к подстрокам используются квадратные скобки со срезами (slicing) и индексами. Индексация начинается с 0 в начале строки и -1 в конце.
Live Demo#!/usr/bin/python var1 = 'Hello World!' var2 = "Python Programming" print "var1[0]: ", var1[0] print "var2[1:5]: ", var2[1:5]
Результат:
var1[0]: H var2[1:5]: ytho
Обновление строк
Строки неизменяемы. "Обновление" — это переприсваивание переменной новой строке. Новое значение может быть связано со старым или быть совершенно другим.
Live Demo#!/usr/bin/python var1 = 'Hello World!' print "Updated String :- ", var1[:6] + 'Python'
Результат:
Updated String :- Hello Python
Escape-символы
Таблица escape-последовательностей (обратный слеш) для непечатных символов. Работают в одинарных и двойных кавычках.
| Обратный слеш | Hex | Описание |
|---|---|---|
| \a | 0x07 | Звонок/оповещение |
| \b | 0x08 | Backspace |
| \cx | Control-x | |
| \C-x | Control-x | |
| \e | 0x1b | Escape |
| \f | 0x0c | Formfeed (перевод страницы) |
| \M-\C-x | Meta-Control-x | |
| \n | 0x0a | Новая строка (Newline) |
| \nnn | Восьмеричная нотация (n в диапазоне 0-7) | |
| \r | 0x0d | Возврат каретки (Carriage return) |
| \s | 0x20 | Пробел |
| \t | 0x09 | Табуляция (Tab) |
| \v | 0x0b | Вертикальная табуляция |
| \x | Символ x | |
| \xnn | Шестнадцатеричная нотация (n: 0-9, a-f, A-F) |
Специальные операторы строк
Пусть a = 'Hello', b = 'Python':
| Оператор | Описание | Пример |
|---|---|---|
| + | Конкатенация — объединение строк | a + b → HelloPython |
| * | Повторение — создаёт новые строки, повторяя исходную | a*2 → HelloHello |
| [] | Срез — символ по индексу | a[1] → e |
| [:] | Диапазон среза — подстрока по диапазону | a[1:4] → ell |
| in | Принадлежность — true, если символ есть в строке | H in a → 1 |
| not in | Принадлежность — true, если символа нет в строке | M not in a → 1 |
| r/R | Сырая строка (raw) — подавляет интерпретацию escape. Синтаксис: r'...' или R'...' | print r'\n' выводит \n |
| % | Форматирование строки | см. ниже |
Оператор форматирования строк %
Одна из лучших возможностей Python — оператор форматирования %. Уникален для строк, заменяет семейство printf() из C. Пример:
Live Demo#!/usr/bin/python
print "My name is %s and weight is %d kg!" % ('Zara', 21)
Результат:
My name is Zara and weight is 21 kg!
Полный набор символов форматирования:
| Символ | Преобразование |
|---|---|
| %c | символ |
| %s | строка через str() |
| %i | целое со знаком |
| %d | целое со знаком |
| %u | беззнаковое целое |
| %o | восьмеричное целое |
| %x | шестнадцатеричное (строчные) |
| %X | шестнадцатеричное (ЗАГЛАВНЫЕ) |
| %e | экспоненциальная нотация (строчная e) |
| %E | экспоненциальная нотация (ЗАГЛАВНАЯ E) |
| %f | вещественное число с плавающей точкой |
| %g | короткое из %f и %e |
| %G | короткое из %f и %E |
Дополнительные символы и функциональность:
| Символ | Функциональность |
|---|---|
| * | аргумент задаёт ширину или точность |
| - | выравнивание по левому краю |
| + | отображать знак |
| <sp> | пробел перед положительным числом |
| # | добавить ведущий 0 (восьмеричное) или 0x/0X (шестнадцатеричное) |
| 0 | заполнение слева нулями (вместо пробелов) |
| % | '%%' даёт один литерал '%' |
| (var) | переменная отображения (аргументы-словарь) |
| m.n | m — мин. ширина, n — знаков после запятой |
Тройные кавычки
Тройные кавычки позволяют строкам занимать несколько строк, включая литеральные NEWLINE, TAB и спецсимволы. Синтаксис — три последовательных одинарных или двойных кавычка.
Live Demo#!/usr/bin/python para_str = """this is a long string that is made up of several lines and non-printable characters such as TAB ( \t ) and they will show up that way when displayed. NEWLINEs within the string, whether explicitly given like this within the brackets [ \n ], or just a NEWLINE within the variable assignment will also show up. """ print para_str
Результат (обратите внимание на преобразование спецсимволов и финальный NEWLINE):
this is a long string that is made up of several lines and non-printable characters such as TAB ( ) and they will show up that way when displayed. NEWLINEs within the string, whether explicitly given like this within the brackets [ ], or just a NEWLINE within the variable assignment will also show up.
Сырые строки (raw) не трактуют обратный слеш как спецсимвол. Все символы остаются такими, как написаны:
Live Demo#!/usr/bin/python print 'C:\\nowhere'
Результат:
C:\nowhere
С raw-строкой:
Live Demo#!/usr/bin/python print r'C:\\nowhere'
Результат:
C:\\nowhere
Строки Unicode
Обычные строки хранятся как 8-битный ASCII, Unicode — как 16-битный. Это позволяет использовать расширенный набор символов, включая специальные символы большинства языков мира.
Live Demo#!/usr/bin/python print u'Hello, world!'
Результат:
Hello, world!
Unicode-строки используют префикс u, как raw — префикс r.
Встроенные методы строк
Python включает следующие методы для манипуляции строками:
| № | Метод и описание |
|---|---|
| 1 | capitalize() — первая буква заглавная |
| 2 | center(width, fillchar) — строка, центрированная в поле ширины width с заполнителем fillchar |
| 3 | count(str, beg=0, end=len(string)) — сколько раз str встречается в строке или подстроке |
| 4 | decode(encoding='UTF-8', errors='strict') — декодирование строки с кодеком |
| 5 | encode(encoding='UTF-8', errors='strict') — кодирование строки; при ошибке ValueError, если errors не 'ignore' или 'replace' |
| 6 | endswith(suffix, beg=0, end=len(string)) — заканчивается ли строка/подстрока суффиксом |
| 7 | expandtabs(tabsize=8) — табы в пробелы (по умолчанию 8) |
| 8 | find(str, beg=0, end=len(string)) — индекс первого вхождения str или -1 |
| 9 | index(str, beg=0, end=len(string)) — как find, но исключение, если не найдено |
| 10 | isalnum() — true, если хотя бы 1 символ и все алфавитно-цифровые |
| 11 | isalpha() — true, если хотя бы 1 символ и все алфавитные |
| 12 | isdigit() — true, если только цифры |
| 13 | islower() — true, если есть буквенные и все в нижнем регистре |
| 14 | isnumeric() — true для unicode, если только числовые символы |
| 15 | isspace() — true, если только пробельные символы |
| 16 | istitle() — true, если строка в "title case" (каждое слово с заглавной) |
| 17 | isupper() — true, если есть буквенные и все в верхнем регистре |
| 18 | join(seq) — объединяет строковые представления элементов seq с разделителем-строкой |
| 19 | len(string) — длина строки |
| 20 | ljust(width[, fillchar]) — строка, выровненная влево в поле ширины width |
| 21 | lower() — все заглавные в строчные |
| 22 | lstrip() — удаляет ведущие пробелы |
| 23 | maketrans() — таблица перевода для translate |
| 24 | max(str) — максимальный алфавитный символ |
| 25 | min(str) — минимальный алфавитный символ |
| 26 | replace(old, new[, max]) — заменяет все вхождения old на new или до max раз |
| 27 | rfind(str, beg=0, end=len(string)) — как find, но поиск с конца |
| 28 | rindex(str, beg=0, end=len(string)) — как index, но с конца |
| 29 | rjust(width[, fillchar]) — строка, выровненная вправо в поле ширины width |
| 30 | rstrip() — удаляет завершающие пробелы |
| 31 | split(str="", num=string.count(str)) — разбивает по разделителю str (пробел по умолчанию), возвращает список подстрок; не более num частей |
| 32 | splitlines(num=string.count('\n')) — разбивает по NEWLINE, возвращает список строк без NEWLINE |
| 33 | startswith(str, beg=0, end=len(string)) — начинается ли строка/подстрока с подстроки str |
| 34 | strip([chars]) — lstrip() + rstrip() |
| 35 | swapcase() — инвертирует регистр всех букв |
| 36 | title() — "title case": каждое слово с заглавной, остальные строчные |
| 37 | translate(table, deletechars="") — перевод по таблице (256 символов), удаление del-символов |
| 38 | upper() — все строчные в заглавные |
| 39 | zfill(width) — строка, дополненная слева нулями до ширины width; для чисел, знак сохраняется |
| 40 | isdecimal() — true для unicode, если только десятичные символы |
Python
- Строки в C#: основы, операции и продвинутые техники
- Мастерство операторов Python: Полное руководство
- Словари в Python: создание, манипуляции и продвинутые техники
- Освоение строковых операций в Python: replace, join, split, reverse, преобразование регистра
- Мастерство метода strip() в Python: подробное руководство и практические примеры
- Мастерство метода str.count() в Python: как подсчитывать символы и подстроки с примерами
- Мастерство строк форматирования format() в Python: понятные примеры
- Python len(): практическое руководство по измерению длины объектов
- Мастерство метода String.find() в Python: синтаксис, примеры и альтернативы
- Освоение enumerate() в Python: циклы с индексами для списков, кортежей, строк и словарей