Обмен технологиями

Глава 6. Строковые объекты и операции нарезки

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Оглавление

Глава 6. Строковые объекты и операции нарезки

6.1 Строковый объект

6.2 Часто используемые методы в символах

6.3 Операция нарезки

Глава 6. Строковые объекты и операции нарезки

6.1 Строковый объект

Строка: строка, состоящая из нескольких символов.

Символы: символы, видимые невооруженным глазом.

Байты: невидимы невооруженным глазом.

Как Python определяет строки:

одинарные кавычки, двойные кавычки, тройные кавычки str()

6.2 Часто используемые методы в символах

 >>> dir(s)
 ['capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

заглавные буквы ------- Сделать первую букву строки заглавной

 >>> s
 'this is a string'
 >>> s.capitalize()
 'This is a string'

center(width, fillchar=' ') ------ Отцентрируйте строку в соответствии с заданной длиной и выровняйте ее по центру

rjust --------- выравнивание по правому краю

ljust ------ выравнивание по левому краю

 >>> help(s.center)
 Help on built-in function center:
 ​
 center(width, fillchar=' ', /) method of builtins.str instance
     Return a centered string of length width.
 ​
     Padding is done using the specified fill character (default is a space).
 ​
 >>> s.center(40)
 '            this is a string            '
 >>> s.center(40,"*")
 '************this is a string************'
 >>> s.rjust(40)
 '                        this is a string'
 >>> s.ljust(40)
 'this is a string                        '
 >>> s.ljust(40,"*")
 'this is a string************************'
 >>> s.rjust(40,"*")
 '************************this is a string'

count --------- подсчитывает количество раз, когда символ появляется в строке

 >>> s
 'this is a string'
 >>> s.count("s")
 3
 >>> s.count("is")
 2

Endswith ------- Определить, заканчивается ли строка на XXX

начинается с ------- Определить, начинается ли строка с XXX

 >>> s.endswith("g")
 True
 >>> s.endswith("ing")
 True
 >>> s.endswith("f")
 False
 >>> s.startswith("t")
 True
 >>> s.startswith("f")
 False

index ------ Позиция, где искомый символ или строка впервые появляется в строке. Если она не существует, будет выдано исключение (отчет об ошибке).

rindex ------- Поиск справа налево, позиция, где искомый символ или строка впервые появляется в строке (эквивалентно последнему вхождению символа или строки, искомому слева направо в строке) ), если оно не существует, выдать исключение (сообщить об ошибке)

 >>> s
 'this is a string'
 >>> s.index("s")
 3
 >>> s.index("is")
 2
 >>> s.index("f")
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
 ValueError: substring not found
 >>> s.index(" ")
 4
 >>> s.rindex("s")
 10
 >>> s.rindex("f")
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
 ValueError: substring not found

find ------- Позиция первого вхождения искомого символа или строки в строке. Если он не существует, возвращается -1.

rfind ----- Поиск справа налево, положение первого вхождения символа или строки в строке (эквивалентно положению последнего вхождения символа или строки в строке слева направо)), возвращает -1, если он не существует

 >>> s
 'this is a string'
 >>> s.find("s")
 3
 >>> s.find("f")
 -1
 >>> s.rfind("f")
 -1
 >>> s.rfind("s")
 10

encode ----- метод для преобразования строк в байты в python3, метод decode() для преобразования байтов в строки (метод в байтах)

 >>> s
 'this is a string'
 >>> s.encode()
 b'this is a string'
 >>> d = s.encode()
 >>> d
 b'this is a string'
 >>> type(d)
 <class 'bytes'>
 >>> d
 b'this is a string'
 >>> d.decode()
 'this is a string'
 >>> ss = d.decode()
 >>> ss
 'this is a string'
 >>> type(ss)
 <class 'str'>

format ------ строка формата, объединение строк

isupper ------ Определяет, состоит ли строка из заглавных букв

islower ----- ------ Определить, состоит ли строка из строчных букв

>>> s.isupper()
False
>>> s.islower()
False

istitle ----- Определить, является ли это заголовком

>>> s.istitle()
False
>>> ss = "This Is A Dog"
>>> ss.istitle()
True

isspace ----- Обычно он не используется для определения того, является ли это пробелом.

>>> sss = "       "
>>> sss.isspace()
True
>>> ss
'This Is A Dog'
>>> ss.isspace()
False

isdigit ------ Определить, является ли это числом

>>> sss = "123234344"
>>> sss.isdigit()
True
>>> ss
'This Is A Dog'
>>> ss.isdigit()
False
>>> sss = "1233443gggg"
>>> sss.isdigit()
False

isalnum ------ определяет, являются ли это буквами и цифрами (буквенно-цифровыми)

>>> help(s.isalnum)
Help on built-in function isalnum:

isalnum() method of builtins.str instance
    Return True if the string is an alpha-numeric string, False otherwise.

    A string is alpha-numeric if all characters in the string are alpha-numeric and
    there is at least one character in the string.

>>> sss
'1233443gggg'
>>> sss.isalnum()
True
>>> ss
'This Is A Dog'
>>> ss.isalnum()
False

isalpha ------ определяет, является ли это буквой

title ----- Преобразование строки в формат заголовка

>>> s
'This is a string'
>>> s.istitle()
False
>>> s.title()
'This Is A String'
>>> sss = s.title()
>>> sss
'This Is A String'
>>> sss.istitle()
True

верхний ------- Преобразование строки в верхний регистр

нижний ------- Преобразование строки в нижний регистр

>>> s
'This is a string'
>>> s.lower()
'this is a string'
>>> s.upper()
'THIS IS A STRING'

Split ----- Разделить строку в соответствии с указанным символом, возвращаемое значение — список

>>> s
'This is a string'
>>> s.split(" ")
['This', 'is', 'a', 'string']
>>> l = s.split(" ")
>>> l
['This', 'is', 'a', 'string']
>>> type(l)
<class 'list'>
>>> l = s.split("s")
>>> l
['Thi', ' i', ' a ', 'tring']

join ------ объединяет итерируемый объект в строку в соответствии с указанным форматом

>>> ls = ["A","B","c","d"]
>>> type(ls)
<class 'list'>
>>> ss = " ".join(ls)
>>> ss
'A B c d'
>>> type(ss)
<class 'str'>
>>> ss = "*".join(ls)
>>> ss
'A*B*c*d'

полоска ------- убрать пробелы с обеих сторон

rstrip ------ очистите пробелы справа

lstrip -------- очистить левые пробелы

>>> ss = "                              hhhhhhh                                  "
>>> ss
'                              hhhhhhh                                  '
>>> ss.strip()
'hhhhhhh'
>>> ss.strip()
'hhhhhhh'
>>> ss
'                              hhhhhhh                                  '
>>> ss.rstrip()
'                              hhhhhhh'
>>> ss.lstrip()
'hhhhhhh                                  '

replace ("исходный символ", "новый символ") ------ Замените соответствующий символ

>>> s
'This is a string'
>>> s.replace("s","t")
'Thit it a ttring'

6.3 Операция нарезки

Срез: используется для разделения итерируемых объектов (контейнеров).

Грамматические правила:

object[start_index:end_index:step]

start_index ------- Начальный индекс (начальная позиция)

end_index ------ Конечный индекс (конечная позиция), не включает значение в end_index

шаг ---- длина шага, может быть положительным или отрицательным числом, положительное число (слева направо), отрицательное число (справа налево), значение по умолчанию — 1.

object[:]  ----- 切割的是一个完整的对象
object[start_index:]  ------ 从start_index开始切割到最后的位置,步长为1
object[:end_index] ------ 从最开始的位置切割到end_index处,但是不包含end_index
object[start_index:end_index] ------- 从start_index开始切割到end_index处,但是不包含end_index,步长为1
object[start_index:end_index:step] ------------ 从start_index开始切割到end_index处,但是不包含end_index,步长为step  

Интервал между передним закрытием и задним открытием

ls = [0,1,2,3,4,5,6,7,8,9]

1. Вырезать одно значение

>>> ls
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[0]
0
>>> ls[-4]
6

2. Вырежьте весь объект

>>> ls[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[::]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[::-1]  #-1 表示从右往左切割 所以是倒序
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

3. start_index и end_index — положительные числа.

>>> ls
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[1:6]
[1, 2, 3, 4, 5]
>>> ls[1:6:-1]  # start_index=1 end_index = 6表示的是从1切割到6的位置,但是不包含6处的值,从左往右切割,step=-1 表示从右往左   
[]
>>> ls[6:1]
[]
>>> ls[6:1:-1]
[6, 5, 4, 3, 2]
>>> ls[:6]
[0, 1, 2, 3, 4, 5]
>>> ls[:6:-1]
[9, 8, 7]
>>> ls[6:]
[6, 7, 8, 9]
>>> ls[6::-1]
[6, 5, 4, 3, 2, 1, 0]
>>>

4. start_index и end_index — отрицательные числа.

>>> ls
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[-1:-6]
[]
>>> ls[-1:-6:-1]
[9, 8, 7, 6, 5]
>>> ls[-6:-1]
[4, 5, 6, 7, 8]
>>> ls[:-6]
[0, 1, 2, 3]
>>> ls[:-6:-1]
[9, 8, 7, 6, 5]
>>> ls[-6:]
[4, 5, 6, 7, 8, 9]
>>> ls[-6::-1]
[4, 3, 2, 1, 0]

5. Start_index и end_index объединяются с положительным и отрицательным

>>> ls
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[1:-6]
[1, 2, 3]
>>> ls[1:-6:-1]
[]
>>> ls[-1:6]
[]
>>> ls[-1:6:-1]
[9, 8, 7]

6. Непрерывная нарезка

>>> ls
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[:8][2:5][-1:]
[4]
ls[:8] ----- [0,1,2,3,4,5,6,7]
ls[:8][2:5]   -----   [2,3,4]
ls[:8][2:5][-1:] ----- [4]

7. Три параметра нарезки также могут быть выражениями

>>> ls
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> ls[2+1:3*2:7%3]
[3, 4, 5]
>>> ls[3:6:1]
[3, 4, 5]
>>> ls[2:6:2]
[2, 4]

8. Нарезкой можно разрезать и другие объекты.

>>> (1,2,3,4,5,6,7,8,9)[:3]
(1, 2, 3)
>>> "ABCDEFGHIJK"[::2]
'ACEGIK'
>>> for i in range(1,100)[2::3][-10:]:
...     print(i)
...
72
75
78
81
84
87
90
93
96
99

Вопросы на собеседовании:

1. Если при использовании срезов для вырезания данных будет превышен диапазон индексов, будет ли сообщено об ошибке?

Об ошибке не будет сообщено. Если оно превышает диапазон, будет возвращен полный объект. Если он несовместим, будет возвращено [].

2. Как отменить вывод списка в Python?

цикл реверс

[::-1]

список.обратный()