Рубрики
Без рубрики

Python: Нотация среза в списке

В этом уроке мы рассмотрим примеры нотации среза в Python на списках. Мы будем нарезать список, найти хвосты и головы списка, перевернуть список, заменить элементы и т. Д.

Автор оригинала: Kristina Popovic.

Вступление

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

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

В этой статье мы рассмотрим все, что вам нужно знать о Нарезке списков в 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.