Строки в Python и функции для работы с ними
- Вводная информация о строках
- Что представляют собой строки в Python
- Литералы строк
- Кодировка строк
- Максимальная длина строки в Python
- Перенос строк
- Конкатенация строк
- Сравнение строк
- Пустая строка Python
- Как удалить строку в Python
- Обращение по индексу
- Форматирование строк
- Оператор %
- str.format()
- f-строки (Python 3.6+)
- Стандартная библиотека Template Strings
- Функции для работы со строками
- Методы для работы со строками
- Преобразование из строки в другой тип
- string → int
- string → list
- string → bytes
- string → datetime
- string → float
- string → dict
- string → json
- Best practices
- Как разбить строку на символы
- Как из строки выделить числа
- Как перевернуть строку
- Как удалить последний символ в строке
- Как убрать пробелы из строки
Строки в языке программирования Python — это объекты, которые состоят из последовательности символов.
Наравне с bool, int и другими типами данных, работа со строковым типом является неотъемлемой частью программирования, так как очень редко встречаются приложения, в которых не используется текст.
Вводная информация о строках
Как и во многих других языках программирования, в Python есть большая коллекция функций, операторов и методов, позволяющих работать со строковым типом.
Что представляют собой строки в Python
С точки зрения Питона, строка — это упорядоченная последовательность символов, которая предназначена для хранения информации в виде простого текста.
Поэтому тип данных string используется в случае, когда что-то нужно представить в текстовой форме.
Литералы строк
Литерал — способ создания объектов, в случае строк Питон предлагает несколько основных вариантов:
>>> 'string' # одинарные кавычки
'string'
>>> "string" # двойные кавычки
'string'
>>> """string"""
'string'
>>> '''string'''
'string'
Если внутри строки необходимо расположить двойные кавычки, и сама строка была создана с помощью двойных кавычек, можно сделать следующее:
>>> 'book "war and peace"' # разный тип кавычек
'book "war and peace"'
>>> "book 'war and peace'" # разный тип кавычек
"book 'war and peace'"
>>> "book \"war and peace\"" # экранирование кавычек одного типа
'book "war and peace"'
>>> 'book \'war and peace\'' # экранирование кавычек одного типа
"book 'war and peace'"
💡 Разницы между строками с одинарными и двойными кавычками нет — это одно и то же
Какие кавычки использовать — решать вам, соглашение PEP 8 не дает рекомендаций по использованию кавычек. Просто выберите один тип кавычек и придерживайтесь его. Однако если в стоке используются те же кавычки, что и в литерале строки, используйте разные типы кавычек — обратная косая черта в строке ухудшает читаемость кода.
Кодировка строк
В третьей версии языка программирования Python все строки представляют собой последовательность Unicode-символов.
В Python 3 кодировка по умолчанию исходного кода — UTF-8. Во второй версии по умолчанию использовалась ASCII. Если необходимо использовать другую кодировку, можно разместить специальное объявление на первой строке файла, к примеру:
# -*- coding: windows-1252 -*-
Максимальная длина строки в Python
Максимальная длина строки зависит от платформы. Обычно это:
- 2**31 - 1 — для 32-битной платформы;
- 2**63 - 1 — для 64-битной платформы;
Константа maxsize
, определенная в модуле sys
:
>>> import sys
>>> sys.maxsize
2147483647
Перенос строк
Перенос строки осуществляется с помощью символа \n
:
>>> text = "one\ntwo\nthree"
>>> print(text)
one
two
three
Конкатенация строк
Одна из самых распространенных операций со строками — их объединение (конкатенация). Для этого используется знак +
, в результате к концу первой строки будет дописана вторая:
>>> s1 = "Hello" + " world"
>>> s2 = " world"
>>> s1+s2
'Hello world world'
При необходимости объединения строки с числом его предварительно нужно привести тоже к строке, используя функцию str()
:
>>> name = "John"
>>> age = 30
>>> "Name: " + name + ", age: " + str(age)
'Name: John, age: 30'
Сравнение строк
При сравнении нескольких строк рассматриваются отдельные символы и их регистр:
- цифра условно меньше, чем любая буква из алфавита;
- алфавитная буква в верхнем регистре меньше, чем буква в нижнем регистре;
- чем раньше буква в алфавите, тем она меньше;
При этом сравниваются по очереди первые символы, затем — 2-е и так далее.
>>> s1 = "1a"
>>> s2 = "aa"
>>> s3 = "Aa"
>>> s4 = "ba"
>>> "1a" > "aa" # сравнение цифры с буквой
False
>>> "aa" > "Aa" # сравнение регистров
True
>>> "aa" > "ba" # сравнение букв по алфавитному порядку
False
>>> "aa" < "az" # первые буквы одинаковые, сравниваются следующие две
True
Далеко не всегда желательной является зависимость от регистра, в таком случае можно привести обе строки к одному и тому же регистру. Для этого используются функции lower()
— для приведения к нижнему и upper()
— к верхнему:
>>> s1 = "Intel"
>>> s2 = "intel"
>>> s1 == s2
False
>>> s1.lower() == s2.lower()
True
Пустая строка Python
Объявить пустую строку можно следующими способами:
>>> ""
''
>>> ''
''
>>> str()
''
Как удалить строку в Python
Строки, как и некоторые другие типы данных в языке Python, являются неизменяемыми объектами. При задании нового значения строке просто создается новая, с заданным значением. Для удаления строки можно воспользоваться методом replace()
, заменив ее на пустую строку:
>>> s = "test"
>>> s.replace("test", "")
''
Или перезаписать переменную пустой строкой:
>>> s = "test"
>>> s = ""
>>> s
''
Обращение по индексу
Для выбора определенного символа из строки можно воспользоваться обращением по индексу, записав его в квадратных скобках:
>>> s = "abcdef"
>>> s[0]
'a'
>>> s[2]
'c'
Индекс начинается с 0
В Python предусмотрена возможность получить доступ и по отрицательному индексу. В таком случае отсчет будет вестись от конца строки:
>>> s = "abcdef"
>>> s[-1]
'f'
Форматирование строк
Часто возникает ситуация, когда необходимо создать строку, подставив в нее определенные значения, полученные во время выполнения программы. Подстановка данных в таком случае выполняется при помощи форматирования строк, сделать это можно несколькими способами.
Оператор %
Строки в Python обладают встроенной операцией, к которой можно получить доступ оператором %, что дает возможность очень просто делать форматирование. Самый простой пример — когда для подстановки нужен только один аргумент, значением будет он сам:
>>> name = "Alex"
>>> 'Hello, %s' % name
'Hello, Alex'
Если же для подстановки используется несколько аргументов, то значением будет кортеж со строками:
>>> '%d %s, %d %s' % (6, 'bananas', 10, 'lemons')
'6 bananas, 10 lemons'
Как видно из предыдущего примера, зависимо от типа данных для подстановки и того, что требуется получить в итоге, пишется разный формат. Наиболее часто используются:
- '%d', '%i', '%u — десятичное число;
- '%c' — символ, точнее строка из одного символа или число – код символа;
- '%r' — строка (литерал Python);
- '%s' — строка.
Такой способ форматирования строк называет "старым" стилем, который в Python 3 был заменен на более удобные способы.
str.format()
В Python 3 появился более новый метод форматирования строк, который вскоре перенесли и в Python 2.7. Такой способ избавляет программиста от специального синтаксиса %-оператора. Делается все путем вызова .format()
для строковой переменной. С помощью специального символа — фигурных скобок — указывается место для подстановки значения, каждая пара скобок указывает отдельное место для подстановки, значения могут быть разного типа:
>>> print('{}'.format(100))
100
>>> '{0}, {1}, {2}'.format('one', 'two', 'three')
'one, two, three'
>>> '{2}, {1}, {0}'.format('one', 'two', 'three')
'three, two, one'
💭 В Python 3 форматирование строк с использованием "нового стиля" является более предпочтительным по сравнению с использованием %-стиля, так как предоставляет более широкие возможности, не усложняя простые варианты использования.
f-строки (Python 3.6+)
В Python версии 3.6 появился новый метод форматирования строк — "f-строки", с его помощью можно использовать встроенные выражения внутри строк:
>>> name = 'Alex'
>>> f'Hello, {name}!'
'Hello, Alex!'
Такой способ форматирования очень мощный, так как дает возможность встраивать выражения:
>>> a = 5
>>> b = 10
>>> f'Five plus ten is {a + b} and not {2 * (a + b)}.'
'Five plus ten is 15 and not 30.'
Таким образом, форматирование с помощью f-строк напоминает использование метода format(), но более гибкое, быстрое и читабельное.
Стандартная библиотека Template Strings
Еще один способ форматирования строк, который появился еще с выходом Python версии 2.4, но так и не стал популярным — использование библиотеки Template Strings. Есть поддержка передачи значения по имени, используется $-синтаксис как в языке PHP:
>>> from string import Template
>>> name = "Alex"
>>> age = 30
>>> s = Template('My name is $name. I’m $age.')
>>> print(s.substitute(name=name, age=age))
My name is Alex. I'm 30
Функции для работы со строками
Для работы со строками в Питоне предусмотрены специальные функции. Рассмотрим их:
Преобразование числового или другого типа к строке:
str(n)
— преобразование числового или другого типа к строке;len(s)
— длина строки;chr(s)
— получение символа по его коду ASCII;ord(s)
— получение кода ASCII по символу.
Методы для работы со строками
Кроме функций, для работы со строками есть немало методов:
find(s, start, end)
— возвращает индекс первого вхождения подстроки в s или -1 при отсутствии. Поиск идет в границах отstart
доend
;rfind(s, start, end)
— аналогично, но возвращает индекс последнего вхождения;replace(s, new)
— меняет последовательность символовs
на новую подстрокуnew
;split(x)
— разбивает строку на подстроки при помощи выбранного разделителя x;join(x)
— соединяет строки в одну при помощи выбранного разделителя x;strip(s)
— убирает пробелы с обеих сторон;lstrip(s), rstrip(s)
— убирает пробелы только слева или справа;lower()
— перевод всех символов в нижний регистр;upper()
— перевод всех символов в верхний регистр;capitalize()
— перевод первой буквы в верхний регистр, остальных — в нижний.
👉 Примеры использования:
>>> text = "Wikipedia is a Python library that makes it easy to access and parse data from Wikipedia"
>>> text.find("Wikipedia")
0
>>> text.rfind("Wikipedia")
79
>>> text.replace("from Wikipedia", "from https://www.wikipedia.org/")
'Wikipedia is a Python library that makes it easy to access and parse data from https://www.wikipedia.org/'
>>> text.split(" ")
['Wikipedia', 'is', 'a', 'Python', 'library', 'that', 'makes', 'it', 'easy', 'to', 'access', 'and', 'parse', 'data', 'from', 'Wikipedia']
split_text = text.split(" ")
>>> "_".join(split_text)
'Wikipedia_is_a_Python_library_that_makes_it_easy_to_access_and_parse_data_from_Wikipedia'
>>> text = " test "
>>> text.strip()
'test'
>>> text.lstrip()
'test '
>>> text.rstrip()
' test'
>>> text = "Python is a product of the Python Software Foundation"
>>> text.lower()
'python is a product of the python software foundation'
>>> text.upper()
'PYTHON IS A PRODUCT OF THE PYTHON SOFTWARE FOUNDATION'
>>> text = "python is a product of the python software foundation"
>>> text.capitalize()
'Python is a product of the python software foundation'
Преобразование из строки в другой тип
В Питоне строки можно преобразовывать в другие типы данных:
string → int
Функция int()
преобразовывает целое число в десятичной системе, заданное как строка, в тип int:
>>> int("10")
10
При необходимости можно указывать систему счисления:
>>> int("0x12F", base=16)
303
string → list
Самый простой способ преобразования строки в список строк — метод split()
:
>>> 'one two three four'.split()
['one', 'two', 'three', 'four']
При необходимости можно указывать разделитель:
>>> 'one, two, three, four'.split(',')
['one', ' two', ' three', ' four']
string → bytes
Преобразование строкового типа в байтовый выполняется функцией encode()
с указанием кодировки:
>>> 'Байты'.encode('utf-8')
b'\xd0\x91\xd0\xb0\xd0\xb9\xd1\x82\xd1\x8b'
string → datetime
Строка в дату преобразовывается функцией strptime()
из стандартного модуля datetime
:
>>> from datetime import datetime
>>> print(datetime.strptime('Jan 1 2020 1:33PM', '%b %d %Y %I:%M%p'))
2020-01-01 13:33:00
string → float
Для преобразования строки в число с плавающей точкой используется стандартная функция float
:
>>> float('1.5')
1.5
string → dict
Создание словаря из строки возможно, если внутри нее данные в формате json. Для этого можно воспользоваться модулем json
:
>>> import json
>>> print(json.loads('{"Russia": "Moscow", "France": "Paris"}'))
{'Russia': 'Moscow', 'France': 'Paris'}
string → json
Конвертация объектов Python в объект json выполняется функцией dumps()
:
>>> import json
>>> json.dumps("hello")
'"hello"'
Best practices
Как разбить строку на символы
Разбиение строки на отдельные символы выполняется несколькими способами:
>>> text = "django"
# вариант 1
>>> list(text)
['d', 'j', 'a', 'n', 'g', 'o']
# вариант 2
>>> [c for c in "text"]
['t', 'e', 'x', 't']
# вариант 3
>>> for c in text:
print(c)
d
j
a
n
g
o
Как из строки выделить числа
Для извлечения чисел из строки можно воспользоваться методами строк:
>>> str = "h3110 23 cat 444.4 rabbit 11 2 dog"
>>> [int(s) for s in str.split() if s.isdigit()]
[23, 11, 2]
Данный пример извлекает только целые положительные числа. Более универсальный вариант – регулярные выражения:
>>> str = "h3110 23 cat 444.4 rabbit 11 2 dog"
>>> import re
>>> re.findall(r'\d+', str)
['3110', '23', '444', '4', '11', '2']
Как перевернуть строку
Существует несколько способов перевернуть строку, начиная от классического – запустить цикл в обратной последовательности, выбирая каждый символ с конца и вставляя его в новую строку, и заканчивая срезами – вариант только для Питона.
С помощью среза — самый быстрый способ:
>>> 'test'[::-1]
'tset'
Использование reversed()
и str.join()
:
>>> ''.join(reversed('test'))
'tset'
Как удалить последний символ в строке
Как и в предыдущем случае – чтобы убрать последний символ наиболее простым и быстрым вариантом будет использование среза:
>>> "Some text1"[:-1]
'Some text'
Как убрать пробелы из строки
В случае удаления пробелов со строки может быть два варианта:
1 Обрезать строку так, чтобы удалить с нее первый и последний пробел, такой вариант может пригодиться, когда пользователь случайно поставит пробел в конце введенного текста:
>>> " Some text ".strip()
'Some text'
2 Удалить со строки все пробелы:
>>> " So me t e x t ".replace(' ', '')
'Sometext'
Работа со строками — неотъемлемая часть создания практически любого приложения, где используется текст, и язык программирования Python предоставляет широкие возможности работы с такими данными.
Саша берёт строку и добавляет к ней слева и справа по одинаковому количеству символов + так, чтобы длина новой строки была в 3 раза больше исходной.
Напишите программу, которая читает строку и делает это преобразование.
Ввод Вывод 1 +1+ привет ++++++привет++++++
Не пойму как программу написать
Попробуйте так:
text = input("Введите текст: ") x3text = f"{'+' * len(text)}{text}{'+' * len(text)}" print(f"Результат: {x3text}")
Шаг 1 — ввод с клавиатуры.
Шаг 2 — формируется новая строка. В данном примере я использую
f-строку
.len(text)
— это подсчет символов в строке. Синтаксис'+' * len(text)
означает дублирование символа '+' столько раз, сколько символов во введенном слове.Шаг 3 — вывод результата на экран.
>>> s1 = "Hello" + " world" >>> s2 = " world" >>> s1+s2 'Hello world world'
Спасибо! Поправили )