Строки
Мы уже рассматривали строки как простой тип данных наряду с целыми и вещественными числами и знаем, что строка – это последовательность символов, заключенных в одинарные или двойные кавычки.
В Python нет символьного типа – типа данных, объектами которого являются одиночные символы. Однако язык позволяет рассматривать строки как объекты, состоящие из подстрок длинной в один и более символов. При этом, в отличие от списков, строки не принято относить к структурам данных. Видимо потому, что структуры данных состоят из более простых типов данных, а для строк в Python нет более простого (символьного) типа.
С другой стороны, строка, как и список, – это упорядоченная последовательность элементов. Следовательно, из нее можно извлекать отдельные символы и срезы.
>>> s = "Hello, World!" >>> s[0] 'H' >>> s[7:] 'World!' >>> s[::2] 'Hlo ol!'
В последнем случае извлечение идет с шагом, равным двум, то есть извлекается каждый второй символ. Извлекать срезы с шагом также можно из списков.
Важным отличием от списков является неизменяемость строк в Python. Нельзя перезаписать какой-то отдельный символ или срез в строке:
>>> s[-1] = '.' Traceback (most recent call last): File "", line 1, in TypeError: 'str' object does not support item assignment
Интерпретатор сообщает, что объект типа str не поддерживает присвоение элементам.
Если требуется изменить строку, то можно создать новую из срезов старой:
>>> s = s[0:-1] + '.' >>> s 'Hello, World.'
В примере берется срез из исходной строки, соединяется с другой строкой. Получается новая строка, которая присваивается переменной s . Ее старое значение при этом теряется.
Методы строк
В Python для строк есть множество методов. Посмотреть их можно по команде dir(str) , получить информацию по каждому – help(str.имя_метода) . Рассмотрим наиболее интересные из них.
Методы split() и join()
Метод split() позволяет разбить строку по пробелам. В результате получается список слов. Если пользователь вводит в одной строке ряд слов или чисел, каждое из которых должно в программе обрабатываться отдельно, то без split() не обойтись.
>>> s = input() red blue orange white >>> s 'red blue orange white' >>> sl = s.split() >>> sl ['red', 'blue', 'orange', 'white'] >>> s 'red blue orange white'
Список, возвращенный методом split() , мы могли бы присвоить той же переменной s , то есть s = s.split() . Тогда исходная строка была бы потеряна. Если она не нужна, то лучше не вводить дополнительную переменную.
Метод split() может принимать необязательный аргумент-строку, указывающей по какому символу или подстроке следует выполнить разделение:
>>> s.split('e') ['r', 'd blu', ' orang', ' whit', ''] >>> '40030023'.split('00') ['4', '3', '23']
Метод строк join() выполняет обратное действие. Он формирует из списка строку. Поскольку это метод строки, то впереди ставится строка-разделитель, а в скобках — передается список:
>>> '-'.join(sl) 'red-blue-orange-white'
Если разделитель не нужен, то метод применяется к пустой строке:
>>> ''.join(sl) 'redblueorangewhite'
Методы find() и replace()
Данные методы строк работают с подстроками. Методы find() ищет подстроку в строке и возвращает индекс первого элемента найденной подстроки. Если подстрока не найдена, то возвращает -1.
>>> s 'red blue orange white' >>> s.find('blue') 4 >>> s.find('green') -1
Поиск может производиться не во всей строке, а лишь на каком-то ее отрезке. В этом случае указывается первый и последний индексы отрезка. Если последний не указан, то ищется до конца строки:
>>> letters = 'ABCDACFDA' >>> letters.find('A', 3) 4 >>> letters.find('DA', 0, 6) 3
Здесь мы ищем с третьего индекса и до конца, а также с первого и до шестого. Обратите внимания, что метод find() возвращает только первое вхождение. Так выражение letters.find(‘A’, 3) последнюю букву ‘A’ не находит, так как ‘A’ ему уже встретилась под индексом 4.
Метод replace() заменяет одну подстроку на другую:
>>> letters.replace('DA', 'NET') 'ABCNETCFNET'
Исходная строка, конечно, не меняется:
>>> letters 'ABCDACFDA'
Так что если результат надо сохранить, то его надо присвоить переменной:
>>> new_letters = letters.replace('DA', 'NET') >>> new_letters 'ABCNETCFNET'
Метод format()
Строковый метод format() уже упоминался при рассмотрении вывода на экран с помощью функции print() :
>>> print("This is a . It's .".format("ball", "red")) This is a ball. It's red.
Однако к print() он никакого отношения не имеет, а применяется к строкам. Лишь потом заново сформированная строка передается в функцию вывода.
Возможности format() широкие, рассмотрим основные.
>>> s1 = "length - <>, width - <>, height - <>" >>> s1.format(3, 6, 2.3) 'length - 3, width - 6, height — 2.3'
Если фигурные скобки исходной строки пусты, то подстановка аргументов идет согласно порядку их следования. Если в фигурных скобках строки указаны индексы аргументов, порядок подстановки может быть изменен:
>>> s2 = "height - , length - " >>> s2.format(3, 6) 'height - 6, length - 3'
Кроме того, аргументы могут передаваться по слову-ключу:
>>> info = "This is a . It's ." >>> info.format(subj="table", prop="small") "This is a table. It's small."
Пример форматирования вещественных чисел:
>>> " ".format(3.33333, 10/6) '1.67 3.333'
Практическая работа
- Вводится строка, включающая строчные и прописные буквы. Требуется вывести ту же строку в одном регистре, который зависит от того, каких букв больше. При равном количестве преобразовать в нижний регистр. Например, вводится строка «HeLLo World», она должна быть преобразована в «hello world», потому что в исходной строке малых букв больше. В коде используйте цикл for , строковые методы upper() (преобразование к верхнему регистру) и lower() (преобразование к нижнему регистру), а также методы isupper() и islower() , проверяющие регистр строки или символа.
- Строковый метод isdigit() проверяет, состоит ли строка только из цифр. Напишите программу, которая запрашивает с ввода два целых числа и выводит их сумму. В случае некорректного ввода программа не должна завершаться с ошибкой, а должна продолжать запрашивать числа. Обработчик исключений try-except использовать нельзя.
Примеры решения и дополнительные уроки в pdf-версии курса
X Скрыть Наверх
Python. Введение в программирование
Что такое функция str в Python?
Функция str() нужна для приведения к типу данных строка (string):
x = 3.5 print(type(x)) # => y = str(3.5) print(type(y)) # =>
Также у функции есть два необязательных аргумента:
- encoding — указывает кодировку, в которую будет происходить конвертация. По умолчанию используется UTF-8
- errors — сообщение об ошибке, если конвертация закончится неудачей
Текстовые строки str в Python
Тип ‘str’ — текстовые строки представляют собой неизменяемые последовательности Юникода. Текстовые данные в Python обрабатываются с помощью встроенного класса str() .
Тип str — текстовые строки можно создать различными способами:
- Одинарные кавычки: ‘позволяет вставлять «двойные» кавычки’
- Двойные кавычки: «позволяет использовать встроенные ‘одинарные’ кавычки».
- Тройные кавычки:
- »’три одинарные кавычки»’,
- «»»три двойные кавычки»»»
- Могут быть созданы из других объектов с помощью класса str() .
Текстовые строки в тройных кавычках могут занимать несколько строк — все связанные пробелы будут включены в итоговую строку.
Строки, которые являются частью одного выражения и имеют только пробелы между собой, будут неявно преобразованы в одну строку. То есть выражение («hello» ‘world’) == «helloworld» . Эту функцию можно использовать для уменьшения необходимого количества обратных слэшей при форматировании строки. Обратите внимание, что конкатенация литералов может использовать разные стили кавычек для каждого компонента, например можно смешивать необработанные строки и строки с тройными кавычками. А форматированные строковые литералы могут быть объединены с обычными строковыми литералами.
Для текстовых строк доступны следующие операции:
- общие операции c последовательностями;
- дополнительные методы встроенного класса str() .
Текстовые строки поддерживают различные формы строковых литералов, включая [escape-последовательности][escape-sequence], а также префикс r»строка» — ‘raw’ необработанная (сырая) строка, который отключает обработку большинства escape-последовательностей.
В Python не существует отдельного типа «символ», поэтому для непустой строки string[0] == string[0:1] .
Также нет изменяемого строкового типа, но str.join() или io.StringIO можно использовать для эффективного построения строк из нескольких фрагментов.
Строки также поддерживают два стиля форматирования строк, один из которых обеспечивает большую степень гибкости и настройки str.format() и другой, основанный на форматировании строк в стиле printf языка C . Стиль форматирования printf обрабатывает более узкий диапазон типов, его немного сложнее использовать, но он быстрее, чем str.format() .
Изменено в Python-3.3: для обратной совместимости с Python-2 префикс u’строка’ (строка Юникода) снова разрешен. Он не влияет на значение строковых литералов и не может быть объединен с префиксом r’строка’ (сырая строка).
- Использование текстовых строк str в Python.
- Создание пользовательского класса строк str в Python.
Примеры использования создания строк и преобразования объектов к типу str :
>>> 'позволяет вставлять "двойные" кавычки' # 'позволяет вставлять "двойные" кавычки' >>> "позволяет использовать встроенные 'одинарные' кавычки" # "позволяет использовать встроенные 'одинарные' кавычки" >>> '''три одинарные кавычки''' # 'три одинарные кавычки' >>> """три двойные кавычки""" # 'три двойные кавычки' >>> '''"двойные кавычки" и 'одинарные кавычки' в строке с тройными кавычками''' # '"двойные кавычки" и \'одинарные кавычки\' в строке с тройными кавычками' # преобразование объекта к строке # получим читаемое значение объекта >>> str(65) # '65' >>> str(65,20) # '65,20' >>> str([1, 6, 3, 5]) # '[1, 6, 3, 5]'
- общие строковые операции,
- обтекание и заполнение текста,
- сравнения файлов и каталогов,
- регулярные выражения,
- интерфейс GNU readline.
- КРАТКИЙ ОБЗОР МАТЕРИАЛА.
- Утиная типизация ‘Duck Typing’
- Что такое вызываемый объект callable?
- Как проверить тип переменной/объекта
- Логический тип данных bool
- Целые числа int
- Ограничение длины преобразования целочисленной строки
- Вещественные числа float
- Комплексные числа complex
- Типы последовательностей
- Список list
- Кортеж tuple
- Диапазон range
- Текстовые строки str
- Словарь dict
- Множество set и frozenset
- Итератор Iterator, протокол итератора
- Генератор generator и выражение yield
- Контекстный менеджер with
- Байтовые строки bytes
- Байтовый массив bytearray
- Тип memoryview, буфер обмена
- Файловый объект file object
- Универсальный псевдоним GenericAlias
- Объект объединения Union
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
