Руководство для начинающих по нарезке строк или списков в Python.
Нарезка для списка VS строк
Нарезка строк и списков работает почти одинаково. Для нарезки строк каждый индекс соответствует 1 списку, а для нарезки списка каждый индекс соответствует 1 элементу в списке. Но в остальном все примерно так же.
Нарезка с двумя аргументами — начало, конец
# iterable[start: end] string = "abcdefg" x = string[0:3] # x will be "abc"
Здесь start=0
и end=3
. Это генерирует индексы 0,1 и 2. Поскольку end
является исключительным, само 3 не включается. Таким образом, этот фрагмент возвращает символы с индексами 0,1 и 2, что оказывается "abc"
.
list1 = [4,5,6,7,8,9,10] x = list1[2:6] # x will be [6,7,8,9]
Здесь start=2
и end=6
. Это генерирует индексы 2,3,4 и 5 (6 исключается), и, следовательно, нарезка возвращает элементы с этими индексами, что оказывается [6,7,8,9]
Нарезка с отрицательными начальными/конечными аргументами
# iterable[start: end] # but start/end can be negative string = "abcdefg" x = string[0:-3] # same as string[0: len(string)-3] # x will be "abcd"
Здесь start=0
и end=-3
. Здесь -3
в нарезке относится к третьему сзади. Это то же самое, что и len(string)-3
, равное 4, и, следовательно, генерирует индексы 0,1,2 и 3. Таким образом, возвращается "abcd"
.
list1 = [4,5,6,7,8,9,10] x = list1[4:-1] # same as list1[4: len(string)-1] # x will be [8,9]
Здесь start=4
и end=-1
. Здесь -1
в срезе относится к 1-му сзади, что совпадает с len(list1)-1
, который равен 6. Таким образом, этот срез генерирует индексы 4 и 5, и, следовательно, возвращается [8,9]
.
Нарезка с 3 аргументами — начало, конец, шаг
# iterable[start: end: step]
Здесь, если мы добавим еще один аргумент, этот третий аргумент будет аргументом step
.
string = "abcdefg" x = string[0:5:2] # x will be "ace"
Здесь start=0
, end=5
и step=2
. Таким образом, мы начинаем с 0 и каждый раз увеличиваем индекс на 2, пока не достигнем конца 5 (сама 5 исключается). Таким образом, мы получаем индексы 0, 2 и 4, и возвращается срез "ace"
.
list1 = [4,5,6,7,8,9,10] x = list1[0:7:3] # x will be [4, 7, 10]
Здесь start=0
, end=7
и step=3
. Таким образом, мы начинаем с 0 и каждый раз увеличиваем индекс на 3, пока не достигнем конца 7 (сама 7 исключается). Таким образом, мы получаем индексы 0, 3 и 6, и возвращается срез [4,7,10]
.
Нарезка в обратном направлении с отрицательным шагом
Аргумент step
также может быть отрицательным. Если это так, то мы откатываемся назад.
string = "abcdefg" x = string[5:1:-1] # x will be "fedc"
Здесь start=5
, end=1
и step=-1
. Мы начинаем с 5 и уменьшаем индекс на 1 на каждой итерации, пока он не достигнет конца 1 (сама 1 исключается), и таким образом мы получим индексы 5, 4, 3 и 2. Символы с этими индексами возвращаются в slice, и, таким образом, возвращается "fedc"
.
list1 = [4,5,6,7,8,9,10] x = list1[3:-1:-1]
Здесь start=3
, end=-1
и step=-1
. Мы начинаем с индекса 3 и уменьшаем индекс на 1 на каждой итерации, пока он не достигнет конца -1 (само собой -1 исключено). Таким образом, мы получаем индексы 3, 2, 1 и 0 и срез [7,6,5,4]
.
Нарезка с пустыми аргументами
string = "abcdefg" x = string[:3] # string[start of string:3] y = string[:3:2] # string[start of string:3:2] # x will be "abc" # y will be "ac"
Если мы опустим наш аргумент start
, мы автоматически начнем с начала списка.
string = "abcdefg" x = string[4:] # string[4:end of string] y = string[::2] # string[start of string:end of string:2] # x will be "efg" # y will be "aceg"
Если мы опустим наш аргумент end
, мы автоматически нарежем список ближе к концу.
string = "abcdefg" x = string[::-1] # string[end of string: start of string: -1] # x will be "gfedcba"
Однако, если наше step
отрицательное и у нас есть пустые аргументы среза, мы срезаем от конца строки к началу строки.
Заключение
Я пишу статьи по программированию (раз в 1–2 дня), которые я бы хотел, чтобы я прочитал в более юном возрасте, чтобы ускорить процесс обучения. Присоединяйтесь к моему списку адресов электронной почты, чтобы получать уведомления о каждой публикации.
Если эта статья была полезной и вы хотите поддержать меня, подумайте о том, чтобы подписаться на членство в Medium — это стоит 5 долларов в месяц, и вы получаете неограниченный доступ к статьям на Medium. Если вы зарегистрируетесь по моей ссылке ниже, я получу небольшую комиссию без каких-либо дополнительных затрат для вас.
Если эта статья была для вас очень ценной, подумайте о том, чтобы угостить меня кофе — каждый маленький вклад будет очень ценен!
Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.