Python: обозначение фрагментов в списке

Введение Термин нарезка в программировании обычно относится к получению подстроки, подкортежа или подсписка из строки, кортежа или списка соответственно. Python предлагает множество простых способов разрезать не только эти три, но и любые итерируемые. Итерируемым является, как следует из названия, любой объект, который можно повторять. В этой статье мы рассмотрим все, что вам нужно знать о нарезке списков в Python. Нарезка списка в Python Есть несколько способов нарезать список, наиболее распространенные:

Вступление

Термин нарезка в программировании обычно относится к получению подстроки, подкортежа или подсписка из строки, кортежа или списка соответственно.

Python предлагает множество простых способов разрезать не только эти три, но и любые итерируемые . Итерируемым является, как следует из названия, любой объект, который можно повторять.

В этой статье мы рассмотрим все, что вам нужно знать о нарезке списков в Python .

Нарезка списка в Python

Есть несколько способов разрезать список, наиболее распространенным из которых является использование : со следующим синтаксисом:

 a_list[start:end] 
 a_list[start:end:step] 

Параметр start представляет начальный индекс, end - конечный индекс, а step - количество элементов, которые «перешагивают».

Если step не указан явно, значение по умолчанию - 1 . Обратите внимание , что элемент с индексом start будет включен в результирующем подсписке, но элемент с индексом end не будет. Первый элемент списка имеет индекс 0 .

Пример без параметра step

 # A list of strings: 
 a_list = ['May', 'the', 'Force', 'be', 'with', 'you.'] 
 sublist = a_list[1:3] 
 print(sublist) 

Это должно напечатать:

 ['the', 'Force'] 

Чтобы пропускать каждое второе слово, установите step 2 :

 a_list = ['The', 'Force', 'will', 'be', 'with', 'you.', 'Always.'] 
 sublist = a_list[1:8:2] 
 print(sublist) 

Выход:

 ['Force', 'be', 'you.'] 

Если step нет в списке, подсписок будет начинаться с начала. Точно так же, если end не указан, подсписок будет заканчиваться концом исходного списка:

 a_list = ['Do.', 'Or', 'do', 'not.', 'There', 'is', 'no', 'try.'] 
 sublist = a_list[:4] 
 print(sublist) 
 sublist = a_list[4:] 
 print(sublist) 

Этот фрагмент кода распечатывает:

 ['Do.', 'Or', 'do', 'not.'] 
 ['There', 'is', 'no', 'try.'] 

Поиск начала и конца списка с помощью среза

Обозначение среза также может использоваться с отрицательной индексацией. Отрицательная индексация работает так же, как обычная индексация, за исключением того факта, что она начинает индексирование с последнего элемента, имеющего индекс -1 .

Это можно использовать для получения начала и конца списка заданной длины. Заголовок списка - это подсписок, который содержит первые n элементов списка, а хвост - подсписок, содержащий последние n элементов.

Давайте продолжим и разделим хвост и начало списка:

 # The length of the tail 
 n = 2 
 a_list = ['Never', 'tell', 'me', 'the', 'odds!'] 
 
 # Head of the list: 
 sublist = a_list[:n] 
 print(sublist) 
 
 # Tail of the list: 
 sublist = a_list[-n:] 
 print(sublist) 

Это выводит:

 ['Never', 'tell'] 
 ['the', 'odds!'] 

Использование нотации среза для переворота списка

Даже step может быть отрицательным. Если мы установим отрицательное значение, результирующий список будет инвертирован со значением step Вместо того, чтобы идти вперед, мы делаем шаг назад, от конца списка к началу и включаем следующие элементы:

 a_list = ['Power!', 'Unlimited', 'power!'] 
 sublist = a_list[::-1] 
 print(sublist) 

Это приводит к:

 ['power!', 'Unlimited', 'Power!'] 

Замена элементов подсписка с помощью нотации среза

Обозначение среза может использоваться для присвоения новых значений элементам определенного подсписка. Например, давайте попробуем заменить хвост и начало списка:

 a_list = ['I', 'am', 'no', 'Jedi.'] 
 print(a_list) 
 # Replacing the head of a list 
 a_list[:1] = ['You', 'are'] 
 print(a_list) 
 # Replacing the tail of a list 
 a_list[-1:] = ['Sith'] 
 print(a_list) 

Ожидаемый результат:

 ['I', 'am', 'no', 'Jedi.'] 
 ['You', 'are', 'no', 'Jedi.'] 
 ['You', 'are', 'no', 'Sith'] 

Замена каждого n-го элемента списка срезной нотацией

Простой способ заменить каждый n-й элемент списка - установить параметр step n в нотации среза:

 a_list = ['I’m', 'just', 'a', 'simple', 'man', 'trying', 'to', 'make', 'my', 'way', 'in', 'the', 'universe.'] 
 
 print(a_list) 
 
 # Replacing every other word starting with the word with the index 1 
 a_list[1::2] = ['only', 'common', 'attempting','do', 'best','the'] 
 print(a_list) 

Это приводит к:

 ['I’m', 'just', 'a', 'simple', 'man', 'trying', 'to', 'make', 'my', 'way', 'in', 'the', 'universe.'] 
 ['just', 'simple', 'trying', 'make', 'way', 'the'] 
 ['I’m', 'only', 'a', 'common', 'man', 'attempting', 'to', 'do', 'my', 'best', 'in', 'the', 'universe.'] 

Заключение

Нарезать любую последовательность в Python легко, просто и интуитивно понятно. Отрицательная индексация предлагает простой способ получить первые или последние несколько элементов последовательности или изменить ее порядок.

В этой статье мы рассмотрели, как применить нотацию фрагментов к спискам в Python.

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus