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(шаблон, замена) | Замена шаблона |
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) | Форматирование строки |
pythonworld.ru
Основные операции с строками в Python
Строки — это последовательности символов. Существует множество алгоритмов обработки строк, в том числе для поиска, сортировки, сравнения и преобразования. Строки Python являются «неизменными», что означает, что они не могут быть изменены после их создания. Чтобы создать строку, поместите последовательность символов в одинарные кавычки, двойные кавычки или тройные кавычки, а затем назначьте ее переменной.
str = ‘Hellow World!’ str = «Hellow World!» str = «»»Sunday Monday Tuesday»»»
str = ‘Hellow World!’ str = «Hellow World!» str = «»»Sunday Monday Tuesday»»» |
Доступ к символам в строке
Чтобы символы доступа из String, используйте квадратные скобки [] для нарезки вместе с индексом или индексами для получения ваших символов. Индекс строки Python начинается с 0.
str = ‘Hellow World!’ print(str [0]) # output is «H» print(str [7]) # output is «W» print(str [0:6]) #output is Hellow print(str [7:12]) #output is World
str = ‘Hellow World!’ print(str [0]) # output is «H» print(str [7]) # output is «W» print(str [0:6]) #output is Hellow print(str [7:12]) #output is World |
Python допускает отрицательную индексацию для своих последовательностей.
Индекс -1 относится к последнему элементу, -2 ко второму последнему пункту и так далее.
print(str [0:-6]) # output is Hellow print(str [7:-1]) # output is World
print(str [0:-6]) # output is Hellow print(str [7:-1]) # output is World |
Объединение строк в Python
Объединение двух или более строк в одну называется конкатенацией. Python использует оператор «+» для объединения одной или нескольких строк
str1 = ‘Hellow ‘ str2 = ‘ World!’ print(str1 + str2)
str1 = ‘Hellow ‘ str2 = ‘ World!’ print(str1 + str2) |
Вывод:
programmera.ru
Работа со строками в Python
В этой статье, мы познакомимся с базовыми основами работы со строками в Python. Строка (string) содержит в себе набор символов в кодировке ASCII и относится к неизменяемому типу данных.
Создание строки в Python
Для создания строки в Python существует три способа.
1) В одинарных кавычках (апострофы)
'одинарные кавычки в строке'
2) В двойных кавычках
"двойные кавычки в строке"
3) В тройных одинарных или двойных кавычках
'''строка_1
строка_2
строка_3'''
'строка_1\nстрока_2\nстрока_23\n' // после нажатия ENTER
print(‘строка_1\nстрока_2\nстрока_23\n’)
// выведет на экране
строка_1
строка_2
строка_3
Последний способ применяется для создания многострочной строки. Когда часть строки нужно перенести на новую строку. Внутри программы на месте переноса строк, Python добавляет символ \n. При выводе на экран многострочной строки, в параметрах print(‘строка_1\nстрока_2\nстрока_23\n’), передается вся эта конструкция.
Нельзя смешивать разновидности кавычек в одной строке, если открыли строку двойной кавычкой, то и закройте строку так же двойной кавычкой.
Обычно строки помещают в переменные, используя оператор присваивания.
new_str = 'переменной присвоили строку'
В Python допускается создание пустой строки.
empty = ''
Конкатенация строк в Python
Операция конкатенация (concatenate) объединяет несколько строк в одну.
a = 'con'
b = 'cat'
c = 'enate'
a + b + c
'concatenate'
Если надо объединить строки с пробелами, то добавляем пробел в кавычках:
d = 'конкатенация'
f = 'строк'
d + ' ' + f
'конкатенация строк'
Как преобразовать число в строку
Попытка склейки разного типа данных, например строки и целого числа, приведет к ошибке. Поэтому, для начала нужно преобразовать число в строку — поставить перед числом оператор str.
'строка' + 10 // неправильно
'строка' + str(10) // правильно
'строка10' // результат
Повторение строки в Python
Как быстро выполнить операцию повторения строки? Очень просто — умножить строку на число повторений.
multi = 'ой-'
print(multi*3)
ой-ой-ой
Длина строки в Python
Операция по вычислению длины строки, довольно часто применяется в программировании. Название функции len — сокращенное от анг. слова length (длина). Функция len() вычисляет количество символов в строке вместе с пробелами. Буквы, знаки пунктуации, пробелы в строке — все это символы.
>>> d_str = 'Длина строки'
>>> len(d_str)
12 // результат
Поиск подстроки в строке в Python
С помощью команды in, можно проверить содержится ли подстрока (символ/ы) в строке, ответом будет истина / ложь.
>>> sub_str = 'поиск подстроки'
>>> 'к' in sub_str
True>>> s = 'найти подстроку'
>>> 'ю' in s
False
Сравнение строк в Python
К строкам в Python, также можно применять математические операторы сравнения (больше, меньше, равно), однако сравниваются они совсем по другим принципам, нежели числа. Машина сравнивает строки по кодовым значениям символов.
Утверждение, что:
'xy' > 'abc'
True // верно
Здесь у вас наверняка возник вопрос: «Ведь буква «a» стоит выше по алфавиту, чем «x»? В чем подвох? Выведем кодировку первых символов у двух строк. Число 120 явно больше, чем 97.
>>> ord('x')
120
>>> ord('a')
97
Строка из заглавных букв, всегда будет меньше строки из маленьких букв. Поскольку кодовые значения больших букв меньше, чем у маленьких.
Заключение
Я слышал не один раз от разных людей, что программирование они начинали изучать с JavaScript или PHP и не сильно в этом преуспели. И сразу после первой неудачной попытки, поставили крест на программировании, посчитали, что нет у них способностей к этому. Позже, они признались, что непонятные вещи в JavaScript / PHP, стали понятными в процессе изучения Python.
Почему так произошло? Я объясняю этот феномен, более простым синтаксисом в Python. Новичок мог позволить себе больше концентрироваться на логике, засчет легкого восприятия синтаксиса. Вот и весь секрет успеха! Не сдавайтесь так просто, попробуйте мой видеокурс по Python, на простом языке и с упражнениями к урокам!
- Создано 28.10.2019 10:23:57
- Михаил Русаков
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
myrusakov.ru
Строки. Функции и методы строк — Документация Python Summary 1
# Литералы строк 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) # Поиск подстроки в строке. Возвращает номер первого вхождения или -1 S.find(str, [start],[end]) # Поиск подстроки в строке. Возвращает номер последнего вхождения или -1 S.rfind(str, [start],[end]) # Поиск подстроки в строке. Возвращает номер первого вхождения или вызывает ValueError S.index(str, [start],[end]) # Поиск подстроки в строке. Возвращает номер последнего вхождения или вызывает ValueError S.rindex(str, [start],[end]) # Замена шаблона S.replace(шаблон, замена) # Разбиение строки по разделителю S.split(символ) # Состоит ли строка из цифр S.isdigit() # Состоит ли строка из букв S.isalpha() # Состоит ли строка из цифр или букв S.isalnum() # Состоит ли строка из символов в нижнем регистре S.islower() # Состоит ли строка из символов в верхнем регистре S.isupper() # Состоит ли строка из неотображаемых символов (пробел, символ перевода страницы ('\f'), "новая строка" ('\n'), "перевод каретки" ('\r'), "горизонтальная табуляция" ('\t') и "вертикальная табуляция" ('\v')) S.isspace() # Начинаются ли слова в строке с заглавной буквы S.istitle() # Преобразование строки к верхнему регистру S.upper() # Преобразование строки к нижнему регистру S.lower() # Начинается ли строка S с шаблона str S.startswith(str) # Заканчивается ли строка S шаблоном str S.endswith(str) # Сборка строки из списка с разделителем S S.join(список) # Символ в его код ASCII ord(символ) # Код ASCII в символ chr(число) # Переводит первый символ строки в верхний регистр, а все остальные в нижний S.capitalize() # Возвращает отцентрованную строку, по краям которой стоит символ fill (пробел по умолчанию) S.center(width, [fill]) # Возвращает количество непересекающихся вхождений подстроки в диапазоне [начало, конец] (0 и длина строки по умолчанию) S.count(str, [start],[end]) # Возвращает копию строки, в которой все символы табуляции заменяются одним или несколькими пробелами, в зависимости от текущего столбца. Если TabSize не указан, размер табуляции полагается равным 8 пробелам S.expandtabs([tabsize]) # Удаление пробельных символов в начале строки S.lstrip([chars]) # Удаление пробельных символов в конце строки S.rstrip([chars]) # Удаление пробельных символов в начале и в конце строки S.strip([chars]) # Возвращает кортеж, содержащий часть перед первым шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий саму строку, а затем две пустых строки S.partition(шаблон) # Возвращает кортеж, содержащий часть перед последним шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий две пустых строки, а затем саму строку S.rpartition(sep) # Переводит символы нижнего регистра в верхний, а верхнего – в нижний S.swapcase() # Первую букву каждого слова переводит в верхний регистр, а все остальные в нижний S.title() # Делает длину строки не меньшей width, по необходимости заполняя первые символы нулями S.zfill(width) # Делает длину строки не меньшей width, по необходимости заполняя последние символы символом fillchar S.ljust(width, fillchar=" ") # Делает длину строки не меньшей width, по необходимости заполняя первые символы символом fillchar S.rjust(width, fillchar=" ")
ps.readthedocs.io
Программирование на Python. Часть 2: Строки в питоне
Программирование на Python. Часть 2
Сергей Яковлев
Опубликовано 02.08.2010
Серия контента:
Этот контент является частью # из серии # статей: Программирование на Python. Часть 2
https://www.ibm.com/developerworks/ru/library/?series_title_by=**auto**
Следите за выходом новых статей этой серии.
Этот контент является частью серии:Программирование на Python. Часть 2
Следите за выходом новых статей этой серии.
Строкам в питоне присуща простота использования, наличие большого количества встроенных методов, разнообразие возможностей для гибкого использования в повседневной работе. Будут рассмотрены следующие аспекты.
- Строковый тип.
- Срезы (slicing).
- Операции со строками.
- Unicode.
- Форматирование.
- Встроенные методы.
- Тест на конкатенацию.
1. Строковый тип
Строка – это последовательность символов с произвольным доступом. Строки в языке Python невозможно изменить – в этом случае говорят, что это immutable тип. Попытка изменить символ в определенной позиции или подстроку вызовет ошибку:
>>> word = 'strength' >>> word[2] = 'y' TypeError: 'str' object does not support item assignment
Но если очень хочется, то изменить можно, например, так:
>>> word = word[:3] + '!' + word[4:] 'str!ngth'
Или так:
>>> word = word.replace('!','e') 'strength'
Индексы могут иметь отрицательные значения для отсчета с конца – отсчет начинается с -1
:
>>> word[-1] h
Строки в питоне можно заключать как в одинарные, так и в двойные кавычки, причем кавычки одного типа могут быть произвольно вложены в кавычки другого типа:
>>> '123' '123' >>> "7'8''9" "7'8''9"
Длинные строки можно разбивать на несколько строк с помощью обратного слеша:
>>> s = 'this is first word\ and this is second word'
Большие наборы строк и целые тексты можно заключать в тройные кавычки:
>>> print """ One Two Three """
Обратный слеш в строках используется для так называемой escape-последовательности.
После слеша может идти один или несколько символов.
В следующем примере комбинация ‘\n
‘ – это новая строка, ‘\t
‘ – это табуляция:
>>> s ='a\nb\tc' >>> print s a b c
В следующем примере строка состоит из бинарной последовательности трех чисел – двух восьмеричных и одного шестнадцатеричного:
>>> s = '\001\002\x03' >>> s '\x01\x02\x03' >>> len(s) 3
Нужно заметить, что питоновские строки вообще не терминируются в конце нулевым байтом, как это делается, например, в си.
2. Срезы
Срез – это механизм гибкого управления строкой на основе индексации. Можно получить любой символ строки по его индексу. Подобно си, первый символ имеет индекс 0
. Подстрока может быть определена с помощью среза – двух индексов, разделенных двоеточием:
>>> word = 'strength' >>> word[4] n >>> word[0:2] st >>> word[2:4] re
Если в срезе опущен первый символ, значит, он равен нулю; если опущен последний символ – он равен длине строки:
>>> word[:3] str >>> word[5:] gth
Можно выбирать последовательность символов из строки с определенной цикличностью:
>>> s = '1234567890' >>> s[::2] '13579' >>> s[1:10:2] '13579' >>> s[::-1] '0987654321'
3. Операции со строками
Строки можно склеивать с помощью оператора +
:
>>> var = 'Moscow' + 'city'
Между двух строк подряд вообще можно ничего не ставить, и они будут сконкатенированы.
Строки можно умножать с помощью оператора *
:
>>> '123' * 3 '123123123'
Строки можно сравнивать с помощью операторов <, <=, ==, !=, >, >=
.
4. Unicode
Unicode позволяет применять все символы, используемые в текстах на разных языках. Ранее мы могли использовать только 256 символов из определенной кодовой страницы. Перед строкой нужно поставить спецификатор u
– при этом на каждый символ отводится 2 байта, так как по умолчанию ставится кодировка UTF-8:
>>> w = u'Вася Пупкин' >>> w u'\u0412\u0430\u0441\u044f \u041f\u0443\u043f\u043a\u0438\u043d'
Юникодную строку можно также создать в известной кодировке: ASCII, UTF-8, UTF-16, KOI8-R, CP1251, CP866 и т.д.:
>>> s = unicode("Привет", "KOI8-R") >>> s u'\u043f\xf7\u044f\u2500\u043f\u2566\u043f\u2561\u043f\u2563\u044f\u250c'
Метод encode()
позволяет преобразовывать строки Unicode в обычные строки, содержащие текст в указанной кодировке:
>>> s.encode("KOI8-R") '\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'
5. Форматирование
Форматирование в питоне – мощный инструмент управления строками. Есть несколько подходов – стандартный и с использованием шаблонов. Для форматирования в питоновских строках используется стандартный оператор – символ %
. Слева от процента указываем строку, справа – значение или список значений:
>>> s = 'Hello %s' % 'word' >>> s 'Hello word' >>> s = 'one %s %s' % ('two','three') >>> s 'one two three'
Если нужно преобразование числа в строку, используется числовой спецификатор – %d
или %f
:
>>> s = 'one %d %f' % (2 , 3.5) >>> s 'one 2 3.500000'
При форматировании можно указать общую ширину строки и точность для чисел, при этом число будет дополнено незначащими нулями. В следующем примере результирующая строка будет иметь длину 10 символов, на дробную часть будет отведено 5 символов:
>>> x = 4/3 >>> '%10.5f' % x ' 1.00000'
Пробелы слева можно отформатировать нулями:
>>> from math import pi >>> '%015.10f' % pi '0003.1415926536'
Для форматирования можно использовать другой подход – шаблоны строк, Template. В следующем примере для форматирования уже можно использовать словарь:
>>> from string import Template >>> s = Template('1 $two 3 4 $five') >>> d={} >>> d['two']=2 >>> d['five']=5 >>> s.substitute(d) '1 2 3 4 5'
Таблица типов форматирования для строк
Код | Значение |
---|---|
s | Строковый |
r | Строковый, но с использованием repr , а не str |
c | Посимвольный |
d | Десятичный |
i | Целый |
u | То же, что и d (no longer unsigned ) |
o | Восьмеричный |
x | Шестнадцатеричный |
X | Шестнадцатеричный в верхнем регистре |
e | Floating-point exponent , нижний регистр |
E | То же, что и e , но в верхнем регистре |
f | Floating-point decimal |
F | Floating-point decimal |
g | Floating-point e или f |
C | Floating-point E или F |
% | Символьный % |
6. Методы
Строки обладают большим набором разнообразных методов. Наиболее популярные из них:
find
– находит подстроку в строке – возвращает позицию вхождения строки, либо -1
:
>>> s = 'The find method finds a substring' >>> s.find('find') 4 >>> s.find('finds') 16 >>> s.find('findsa') -1
join
– объединяет через разделитель набор строк:
>>> seq = ['one','two','three'] >>> sep = ',' >>> sep.join(seq) 'one,two,three'
split
– это обратная функция для join
, разбивает строку на последовательность:
>>> s = '/usr/local/bin' >>> s.split('/') ['', 'usr', 'local', 'bin']
replace
– заменяет в строке одну подстроку на другую:
>>> s = 'replace method returns a string' >>> s.replace('returns','return') 'replace method return a string'
strip
– удаляет пробелы слева и справа:
>>> ' this is whitespace string '.strip() 'this is whitespace string'
translate
– в отличие от replace
, может делать множественную замену. В следующем примере каждый символ ‘1
‘ в исходной строке будет заменен на символ ‘3
‘, а символ ‘2
‘ – на символ ‘4
‘ соответственно:
>>> from string import maketrans >>> table = maketrans('12', '34') >>> '1212 5656'.translate(table) '3434 5656'
Для конверсии различных типов в строковый используются функции str, int, ord, chr
:
str
– конвертирует число в строку;int
– конвертирует строку в число;ord
– возвращает значение байта;chr
– конвертирует число в символ.
Таблица методов, доступных в Python 3.0
S.capitalize() |
---|
S.center(width [, fill]) |
S.count(sub [, start [, end]]) |
S.encode([encoding [,errors]]) |
S.endswith(suffix [, start [, end]]) |
S.expandtabs([tabsize]) |
S.find(sub [, start [, end]]) |
S.format(fmtstr, *args, **kwargs) |
S.index(sub [, start [, end]]) |
S.isalnum() |
S.isalpha() |
S.isdecimal() |
S.isdigit() |
S.isidentifier() |
S.islower() |
S.isnumeric() |
S.isprintable() |
S.isspace() |
S.istitle() |
S.isupper() |
S.join(iterable) |
7. Тест на конкатенацию
Тест на строковую конкатенацию в питоне дает интересные результаты. Стандартный подход, при котором новый сегмент добавляется к концу уже существующей строки, в питоне неэффективен: питон при каждой конкатенации будет создавать новый объект, что очень медленно.
Проведем несложный тест: к строке будем конкатенировать символьное представление натуральных чисел по возрастанию в диапазоне от 0 до миллиона.
1-й метод. Используем для хранения строки массив символов array
. Будем просто добавлять туда строковое представление натурального числа, а в конце применим метод array.tostring()
. Этот метод оказался самым медленным.
2-й метод. Используем тот же алгоритм, что и в первом методе, только вместо массива array используем список, а в конце сделаем стандартный джойн.
3-й метод. Используем модуль cStringIO
, в котором есть возможность писать в псевдо-файл, который на самом деле хранится в памяти. В конце вызываем метод getvalue()
.
4-й метод. Создаем в цикле список символьных представлений чисел, а потом одним махом джойним этот список. Отличие его от второго метода в том, что не используется append()
. Вы увидите, что этот метод – самый быстрый.
Код:
import time loop_count = 1000000 def method1(): from array import array char_array = array('c') for num in xrange(loop_count): char_array.fromstring(`num`) return char_array.tostring() def method2(): str_list = [] for num in xrange(loop_count): str_list.append(`num`) return ''.join(str_list) def method3(): from cStringIO import StringIO file_str = StringIO() for num in xrange(loop_count): file_str.write(`num`) return file_str.getvalue() def method4(): return ''.join([`num` for num in xrange(loop_count)]) t1 = time.time() method1() t2 = time.time() print "\t%.1f" % ((t2 - t1)) method2() t3 = time.time() print "\t%.1f" % ((t3 - t2)) method3() t4 = time.time() print "\t%.1f" % ((t4 - t3)) method4() t5 = time.time() print "\t%.1f" % ((t5 - t4))
Подведение итогов
Строки относятся к наиболее популярным базовым типам. Срезы, большой набор встроенных функций, удобное форматирование позволяет гибко и оперативно производить манипуляции там, где мы могли бы затратить значительно большее количество времени на рутинные операции, будь это какой-то другой язык. Питон — это удобство, простота, минимальное количество усилий. В продолжение цикла речь пойдет о списках и словарях. Затем поговорим о модулях, классах и работе с файловой системой средствами Python. Код примеров проверялся на версии питона 2.6.
Ресурсы для скачивания
Подпишите меня на уведомления к комментариям
www.ibm.com
Обработка строк в Python
В Python существуют несколько видов данных. Основные типы данных, с которыми вы столкнетесь – это string, ingteger, float, list, dict и tuple. В данной статье мы рассмотрим тип данных string (строка). Вы удивитесь тому, сколько всего можно делать со строками в Python. Также существует модуль string, который можно импортировать для получения доступа к еще большим возможностям, но мы рассмотрим его в другой статье. Вместо этого, мы пройдемся по следующим разделам:
- Как создавать строки
- Конкатенация строк
- Методы строк
- Замена строк
Как создать строку
Строки всегда создаются одним из трех способов. Вы можете использовать одинарные, двойные и тройные скобки. Давайте посмотрим
my_string = «Добро пожаловать в Python!» another_string = ‘Я новый текст тут…’ a_long_string = »’А это у нас новая строка в троичных скобках»’
my_string = «Добро пожаловать в Python!» another_string = ‘Я новый текст тут…’
a_long_string = »’А это у нас новая строка в троичных скобках»’ |
Строка с тремя скобками может быть создана с использованием трех одинарных скобок или трех двойных скобок. Так или иначе, с их помощью программист может писать строки в нескольких линиях. Если вы впишете это, вы увидите, что выдача сохраняет разрыв строк. Если вам нужно использовать одинарные скобки в вашей строке, то впишите двойные скобки. Давайте посмотрим на пример:
my_string = «I’m a Python programmer!» otherString = ‘Слово «Python» обычно подразумевает змею’ tripleString = «»»В такой «строке» мы можем ‘использовать’ все.»»»
my_string = «I’m a Python programmer!» otherString = ‘Слово «Python» обычно подразумевает змею’ tripleString = «»»В такой «строке» мы можем ‘использовать’ все.»»» |
Данный код демонстрирует то, как вы можете вписать одинарные или двойные скобки в строку. Существует еще один способ создания строки, при помощи метода str. Как это работает:
my_number = 123 my_string = str(my_number)
my_number = 123 my_string = str(my_number) |
Если вы впишете данный код в ваш интерпретатор, вы увидите, что вы изменили значение интегратора на строку и присвоили ее переменной my_string. Это называется кастинг, или конвертирование. Вы можете конвертировать некоторые типы данных в другие, например числа в строки. Но вы также заметите, что вы не всегда можете делать обратное, например, конвертировать строку вроде ‘ABC’ в целое число. Если вы сделаете это, то получите ошибку вроде той, что указана в этом примере:
int(‘ABC’) Traceback (most recent call last): File «<string>», line 1, in <fragment> ValueError: invalid literal for int() with base 10: ‘ABC’
int(‘ABC’)
Traceback (most recent call last): File «<string>», line 1, in <fragment> ValueError: invalid literal for int() with base 10: ‘ABC’ |
Мы рассмотрели обработку исключений в другой статье, но как вы могли догадаться из сообщения, это значит, что вы не можете конвертировать сроки в цифры. Тем не менее, если вы вписали:
То все должно работать. Обратите внимание на то, что строка – это один из неизменных типов Python. Это значит, что вы не можете менять содержимое строки после ее создания. Давайте попробуем сделать это и посмотрим, что получится:
my_string = «abc» my_string[0] = «d» Traceback (most recent call last): File «<string>», line 1, in <fragment> TypeError: ‘str’ object does not support item assignment
my_string = «abc» my_string[0] = «d»
Traceback (most recent call last): File «<string>», line 1, in <fragment> TypeError: ‘str’ object does not support item assignment |
Здесь мы пытаемся изменить первую букву с «а» на «d«, в итоге это привело к ошибке TypeError, которая не дает нам сделать это. Теперь вы можете подумать, что присвоение новой строке то же значение и есть изменение строки. Давайте взглянем, правда ли это:
my_string = «abc» a = id(my_string) print(a) # 19397208 my_string = «def» b = id(my_string) print(b) # 25558288 my_string = my_string + «ghi» c = id(my_string) print(c) # 31345312
my_string = «abc» a = id(my_string) print(a) # 19397208
my_string = «def» b = id(my_string) print(b) # 25558288
my_string = my_string + «ghi» c = id(my_string) print(c) # 31345312 |
Проверив id объекта, мы можем определить, что когда мы присваиваем новое значение переменной, то это меняет тождество. Обратите внимание, что в версии Python, начиная с 2.0, строки могут содержать только символы ASCII. Если вам нужен Unicode, тогда вы должны вписывать u перед вашей строкой. Пример:
# -*- coding: utf-8 -*- my_unicode_string = u»Это юникод!»
# -*- coding: utf-8 -*- my_unicode_string = u»Это юникод!» |
В Python, начиная с версии 3, все строки являются юникодом.
Мы собрали ТОП Книг для Python программиста которые помогут быстро изучить язык программирования Python. Список книг: Книги по PythonКонкатенация строк
Конкатенация – это важный момент, это означает соединение или добавление двух объектов вместе. В нашем случае, нам нужно узнать, как добавить две строки вместе. Как вы можете догадаться, в Python эта операция очень простая:
# -*- coding: utf-8 -*- string_one = «Собака съела » string_two = «мою книгу!» string_three = string_one + string_two print(string_three) # Собака съела мою книгу!
# -*- coding: utf-8 -*-
string_one = «Собака съела « string_two = «мою книгу!» string_three = string_one + string_two
print(string_three) # Собака съела мою книгу! |
Оператор + конкатенирует две строки в одну
Методы строк
Строка является объектом в Python. Фактически, все, что есть в Python – является объектом. Если вы хотите узнать больше об Объектно-ориентированном программирование, мы рассмотрим это в другой статье «Классы в Python«. В данный момент достаточно знать, что строки содержат собственные встроенные методы. Например, допустим, у вас есть следующая строка:
my_string = «This is a string!»
my_string = «This is a string!» |
Теперь вам нужно сделать так, чтобы вся эта строка была в верхнем регистре. Чтобы сделать это, все, что вам нужно, это вызвать метод upper(), вот так:
Если вы открыли ваш интерпретатор, вы также можете сделать то же самое:
«This is a string!».upper()
«This is a string!».upper() |
Существует великое множество других методов строк. Например, если вам нужно, что бы все было в нижнем регистре, вам нужно использовать метод lower(). Если вы хотите удалить все начальные и конечные пробелы, вам понадобится метод strip(). Для получения списка всех методов строк, впишите следующую команду в ваш интерпретатор:
Вы увидите что-то на подобие этого:
[‘__add__’, ‘__class__’, ‘__contains__’, ‘__delattr__’, ‘__doc__’, ‘__eq__’, ‘__format__’, ‘__ge__’, ‘__getattribute__’, ‘__getitem__’, ‘__getnewargs__’, ‘__getslice__’, ‘__gt__’, ‘__hash__’, ‘__init__’, ‘__le__’, ‘__len__’, ‘__lt__’, ‘__mod__’, ‘__mul__’, ‘__ne__’, ‘__new__’, ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__rmod__’, ‘__rmul__’, ‘__- setattr__’, ‘__sizeof__’, ‘__str__’, ‘__subclasshook__’, ‘_formatter_field_name_split’, ‘_formatter_parser’, ‘capitalize’, ‘center’, ‘count’, ‘decode’, ‘encode’, ‘endswith’, ‘expandtabs’, ‘find’, ‘format’, ‘index’, ‘isalnum’, ‘isalpha’, ‘isdigit’, ‘islower’, ‘isspace’, ‘istitle’, ‘isupper’, ‘join’, ‘ljust’, ‘lower’, ‘lstrip’, ‘partition’, ‘replace’, ‘rfind’, ‘rindex’, ‘rjust’, ‘rpartition’, ‘rsplit’, ‘rstrip’, ‘split’, ‘splitlines’, ‘startswith’, ‘strip’, ‘swapcase’, ‘title’, ‘translate’, ‘upper’, ‘zfill’]
[‘__add__’, ‘__class__’, ‘__contains__’, ‘__delattr__’, ‘__doc__’, ‘__eq__’, ‘__format__’, ‘__ge__’, ‘__getattribute__’, ‘__getitem__’, ‘__getnewargs__’, ‘__getslice__’, ‘__gt__’, ‘__hash__’, ‘__init__’, ‘__le__’, ‘__len__’, ‘__lt__’, ‘__mod__’, ‘__mul__’, ‘__ne__’, ‘__new__’, ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__rmod__’, ‘__rmul__’, ‘__- setattr__’, ‘__sizeof__’, ‘__str__’, ‘__subclasshook__’, ‘_formatter_field_name_split’, ‘_formatter_parser’, ‘capitalize’, ‘center’, ‘count’, ‘decode’, ‘encode’, ‘endswith’, ‘expandtabs’, ‘find’, ‘format’, ‘index’, ‘isalnum’, ‘isalpha’, ‘isdigit’, ‘islower’, ‘isspace’, ‘istitle’, ‘isupper’, ‘join’, ‘ljust’, ‘lower’, ‘lstrip’, ‘partition’, ‘replace’, ‘rfind’, ‘rindex’, ‘rjust’, ‘rpartition’, ‘rsplit’, ‘rstrip’, ‘split’, ‘splitlines’, ‘startswith’, ‘strip’, ‘swapcase’, ‘title’, ‘translate’, ‘upper’, ‘zfill’] |
Вы можете спокойно игнорировать методы, которые начинаются и заканчиваются двойным подчеркиванием, например __add__. Они не используются в ежедневном программировании в Python. Лучше обратите внимание на другие. Если вы хотите узнать, что делает тот или иной метод, просто обратитесь к справке. Например, если вы хотите узнать, зачем вам capitalize, впишите следующее, чтобы узнать:
help(my_string.capitalize)
help(my_string.capitalize) |
Вы получите следующую информацию:
Help on built-in function capitalize: capitalize(…) S.capitalize() -> string Выдача копии строки S только с заглавной буквой.
Help on built-in function capitalize:
capitalize(…) S.capitalize() -> string
Выдача копии строки S только с заглавной буквой. |
Вы только что узнали кое-что о разделе, под названием интроспекция. Python может исследовать все свои объекты, что делает его очень легким в использовании. В основном, интроспекция позволяет вам спрашивать Python о нём. Вам моет быть интересно, как сказать о том, какой тип переменной был использован (другими словами int или string). Вы можете спросить об этом у Python!
type(my_string) # <type ‘str’>
type(my_string) # <type ‘str’> |
Как вы видите, тип переменной my_string является str!
Нарезка строк
Одной из тем, которую вы часто будете делать на практике, является нарезка строк. Помню, меня удивило то, как часто мне нужно было узнать, как это делается в повседневной работе. Давайте посмотрим, как нарезка сработает в следующей строке:
my_string = «I like Python!»
my_string = «I like Python!» |
Каждый символ в строке может стать доступным при помощи слайсинга (нарезки). Например, если вам нужно взять только первый символ, вы можете сделать это следующим образом:
print( my_string[0:1] ) # I
print( my_string[0:1] ) # I |
Таким образом, мы берем первый символ в строке до второго символа, но, не включая его. Да, в Python отсчет ведется с нуля. Это проще понять, если мы определим позицию каждого символа в таблице:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 — I l i k e P y t h o n !
0 1 2 3 4 5 6 7 8 9 10 11 12 13 — I l i k e P y t h o n ! |
Таким образом, у нас есть строка длиной в 14 символов, начиная с нуля и до тринадцати. Давайте приведем несколько примеров, чтобы понять это лучше.
my_string[:1] # ‘I’ my_string[0:12] # ‘I like Pytho’ my_string[0:13] # ‘I like Python’ my_string[0:14] # ‘I like Python!’ my_string[0:-5] # ‘I like Py’ my_string[:] # ‘I like Python!’ my_string[2:] # ‘like Python!’
my_string[:1] # ‘I’ my_string[0:12] # ‘I like Pytho’ my_string[0:13] # ‘I like Python’ my_string[0:14] # ‘I like Python!’ my_string[0:-5] # ‘I like Py’ my_string[:] # ‘I like Python!’ my_string[2:] # ‘like Python!’ |
Как видно в данных примерах, мы можем назначить срез, лишь указав его начало (другими словами, my_string[2:]), конец среза (my_string[:1]), или оба (my_string[0:13]). Мы можем даже использовать отрицательные значения, которые начинаются с конца строки. Так что в примере, где мы указали my_string[0:-5], начало ведется с нуля и заканчивается 5 символами, перед концом строки. Вы можете задаться вопросом «Зачем мне это и где это можно применить?». Лично я использовал это для разбора записей с фиксированной шириной в файлах, или ситуативно для парсинга сложных названий файлов, с очень специфическими наименованиями. Также я использовал это для парсинга значений в бинарных файлах. Любая работа, которая включает в себя обработку текстовых файлов, может быть намного проще, если вы понимаете, как работает нарезка и как эффективно использовать данный инструмент. Вы также можете получить доступ к отдельным символам в строке с помощью индексации. Например:
Данный код выдаст первый символ в строке.
Форматирование строк
Форматирование строк (также известно как замещение) – это замещение значений в базовой строке. Большую часть времени вы будете вставлять строки внутри строк, однако, вам также понадобиться вставлять целые числа и числа с запятыми в строки весьма часто. Существует два способа достичь этой цели. Начнем с старого способа, после чего перейдем к новому:
# -*- coding: utf-8 -*- my_string = «Я люблю %s» % «Python» print(my_string) # Я люблю Python var = «яблоки» newString = «Я ем %s» % var print(newString) # Я ем яблоки another_string = «Я люблю %s и %s» % («Python», var) print(another_string) # Я люблю Python и яблоки
# -*- coding: utf-8 -*-
my_string = «Я люблю %s» % «Python» print(my_string) # Я люблю Python
var = «яблоки» newString = «Я ем %s» % var print(newString) # Я ем яблоки
another_string = «Я люблю %s и %s» % («Python», var) print(another_string) # Я люблю Python и яблоки |
Как вы могли догадаться, % — это очень важная часть вышеописанного кода. Этот символ указывает Python, что вы скоро вставите текст на его место. Если вы будете следовать за строкой со знаком процента и другой строкой или переменной, тогда Python попытается вставить ее в строку. Вы можете вставить несколько строк, добавив несколько знаков процента в свою строку. Это видно в последнем примере. Обратите внимание на то, что когда вы добавляете больше одной строки, вам нужно закрыть эти строки в круглые скобки. Теперь взглянем на то, что случится, если мы вставим недостаточное количество строк:
another_string = «Я люблю %s и %s» % «Python» Traceback (most recent call last): File «<string>», line 1, in <fragment> TypeError: not enough arguments for format string
another_string = «Я люблю %s и %s» % «Python»
Traceback (most recent call last): File «<string>», line 1, in <fragment> TypeError: not enough arguments for format string |
О-па. Мы не передали необходимое количество аргументов для форматирования строки. Если вы внимательно взгляните на пример, вы увидите, что у нас есть два экземпляра %, но для того, чтобы вставить строки, вам нужно передать столько же %, сколько у нас строк. Теперь вы готовы к тому, чтобы узнать больше о вставке целых чисел, и чисел с запятыми. Давайте взглянем.
my_string = «%i + %i = %i» % (1,2,3) print(my_string) # ‘1 + 2 = 3’ float_string = «%f» % (1.23) print(float_string) # ‘1.230000’ float_string2 = «%.2f» % (1.23) print(float_string2) # ‘1.23’ float_string3 = «%.2f» % (1.237) print(float_string3) # ‘1.24’
my_string = «%i + %i = %i» % (1,2,3) print(my_string) # ‘1 + 2 = 3’
float_string = «%f» % (1.23) print(float_string) # ‘1.230000’
float_string2 = «%.2f» % (1.23) print(float_string2) # ‘1.23’
float_string3 = «%.2f» % (1.237) print(float_string3) # ‘1.24’ |
Первый пример достаточно простой. Мы создали строку, которая принимает три аргумента, и мы передаем их. В случае, если вы еще не поняли, Python не делает никаких дополнений в первом примере. Во втором примере, мы передаем число с запятой. Обратите внимание на то, что результат включает множество дополнительных нулей (1.230000). Нам это не нужно, так что мы указываем Python ограничить выдачу до двух десятичных значений в третьем примере (“%.2f”). Последний пример показывает, что Python округлит числа для вас, если вы передадите ему дробь, что лучше, чем два десятичных значения. Давайте взглянем на то, что произойдет, если мы передадим неправильные данные:
int_float_err = «%i + %f» % («1», «2.00») Traceback (most recent call last): File «<string>», line 1, in <fragment> TypeError: %d format: a number is required, not str
int_float_err = «%i + %f» % («1», «2.00») Traceback (most recent call last): File «<string>», line 1, in <fragment> TypeError: %d format: a number is required, not str |
В данном примере мы передали две строки вместо целого числа и дроби. Это привело к ошибке TypeError, что говорит нам о том, что Python ждал от нас чисел. Это указывает на отсутствие передачи целого числа, так что мы исправим это, по крайней мере, попытаемся:
int_float_err = «%i + %f» % (1, «2.00») Traceback (most recent call last): File «<string>», line 1, in <fragment> TypeError: float argument required, not str
int_float_err = «%i + %f» % (1, «2.00»)
Traceback (most recent call last): File «<string>», line 1, in <fragment> TypeError: float argument required, not str |
Мы получили ту же ошибку, но под другим предлогом, в котором написано, что мы должны передать дробь. Как мы видим, Python предоставляет нам полезную информацию о том, что же пошло не так и как это исправить. Если вы исправите вложения надлежащим образом, тогда вы сможете запустить этот пример. Давайте перейдем к новому методу форматирования строк.
Шаблоны и новая методика форматирования строк
Этот метод был добавлен в Python 2.4 в виде шаблонов строк, но в качестве обычного метода string, работающего через метод format в версии 2.6. Так что это не самый свежий метод, просто обновленный. В любом случае, приступим к работе с шаблонами!
print(«%(lang)s is fun!» % {«lang»:»Python»}) # Python is fun!
print(«%(lang)s is fun!» % {«lang»:»Python»}) # Python is fun! |
Должно быть это выглядит странно, но на самом деле мы сменили наши % на %(lang), с тем отличием, что данный объект идет в комплекте с переменной. Вторая часть пример вызывает словарь Python, который мы рассмотрим в следующей статье. В основном, это пара key:value, так что когда Python ищет ключ lang в строке и в указанном словаре ключей, он заменяет этот ключ его значением. Давайте взглянем на следующие примеры:
a = «%(value)s %(value)s %(value)s !» % {«value»:»SPAM»} print(a) # SPAM SPAM SPAM ! b = «%(x)i + %(y)i = %(z)i» % {«x»:1, «y»:2} print(b) Traceback (most recent call last): File «<string>», line 1, in <fragment> KeyError: ‘z’ c = «%(x)i + %(y)i = %(z)i» % {«x»:1, «y»:2, «z»:3} print(c) # 1 + 2 = 3
a = «%(value)s %(value)s %(value)s !» % {«value»:»SPAM»} print(a) # SPAM SPAM SPAM !
b = «%(x)i + %(y)i = %(z)i» % {«x»:1, «y»:2} print(b)
Traceback (most recent call last): File «<string>», line 1, in <fragment> KeyError: ‘z’
c = «%(x)i + %(y)i = %(z)i» % {«x»:1, «y»:2, «z»:3} print(c) # 1 + 2 = 3 |
В первом примере вы могли заметить, что мы передали только одно значение, но оно было вставлено три раза. Это одно из преимуществ использования шаблонов. Второй пример был загвоздкой, в которой мы забыли передать ключ z. В третьем примере эта проблема была исправлена с соответствующим результатом. Теперь давайте взглянем на то, что мы можем сделать, по аналогии с методом форматирования строк:
a = «Python is as simple as {0}, {1}, {2}».format(«a», «b», «c») print(a) # ‘Python is as simple as a, b, c’ b = «Python is as simple as {1}, {0}, {2}».format(«a», «b», «c») print(b) # ‘Python is as simple as b, a, c’ xy = {«x»:0, «y»:10} c = «Graph a point at where x={x} and y={y}».format(**xy) print(c) # Graph a point at where x=0 and y=10
a = «Python is as simple as {0}, {1}, {2}».format(«a», «b», «c») print(a) # ‘Python is as simple as a, b, c’
b = «Python is as simple as {1}, {0}, {2}».format(«a», «b», «c») print(b) # ‘Python is as simple as b, a, c’
xy = {«x»:0, «y»:10} c = «Graph a point at where x={x} and y={y}».format(**xy) print(c) # Graph a point at where x=0 and y=10 |
В двух первых примерах вы можете увидеть, что мы можем передать объекты позиционно. Если мы перестроим порядок, мы получим немного другую выдачу. В последнем примере мы использовали словарь также, как мы использовали шаблоны ранее. Однако, нам нужно извлечь словарь при помощи двойной звездочки, чтобы он работал правильно. Существует множество других случаев, в которых используются строки, такие как определение ширины, выравнивание текста, конвертация в разные базы и многое другое. Убедитесь в том, что вы ознакомились с рекомендациями ниже, для дополнительной информации.
Подведем итоги
Мы проработали большой объем в данной статье. Давайте разберемся:
Сначала мы узнали, как создавать строки, после чего мы перешли к вопросу об их конкатенации. После этого, мы взглянули на несколько методов, которые предлагает нам объект string. Далее, мы рассмотрели нарезку строк и закончили замещением строк.
python-scripts.com
Найти длину строки в питоне (4 способа)
Строки в Python являются неизменяемыми последовательностями кодовых точек Unicode. По заданной строке нам нужно найти ее длину.
Примеры:
Вход: «Привет, мир!» Выход: 12 Вход: 'привет' Выход: 14
Рекомендуется: Пожалуйста, сначала попробуйте подход {IDE} , прежде чем переходить к решению.
Методы:
- Используя встроенную функцию лен. Встроенная функция len возвращает количество элементов в контейнере.
редактировать
ссылка на сайт
str
=
"geeks"
print
(
len
(
str
))
- Использование для цикла и в операторе. Строка может быть повторена, непосредственно в цикле for. Ведение подсчета количества итераций приведет к длине строки.
редактировать
ссылка на сайт
def
findLen(
str
):
counter
=
0
for
i
in
str
:
counter
+
=
1
return
counter
str
=
"geeks"
print
(findLen(
str
))
espressocode.top