Руководство для начинающих по нарезке строк или списков в 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. Если вы зарегистрируетесь по моей ссылке ниже, я получу небольшую комиссию без каких-либо дополнительных затрат для вас.

Зарегистрируйтесь, используя мою ссылку здесь, чтобы читать неограниченное количество статей на Medium

Если эта статья была для вас очень ценной, подумайте о том, чтобы угостить меня кофе — каждый маленький вклад будет очень ценен!



Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.