Python: нарезка итерируемых объектов
Термин нарезка в программировании обычно относится к получению подстроки, подкортежа или подсписка из строки, кортежа или списка соответственно.
Python предлагает множество простых способов разрезать не только эти три, но и любые итерируемые объекты. Итерация, как следует из названия, любой объект, который может повторяться.
В этой статье мы рассмотрим все, что вам нужно знать о нарезке списков в Python.
Нарезка списка в Python
Есть несколько способов разрезать список, наиболее распространенным из которых является использование оператора :
со следующим синтаксисом:
a_list[start:end]
a_list[start:end:step]
Параметр start
представляет собой начальный индекс, end
это конечный индекс, и step
это количество элементов в шаге.
Если step
явно не указано, используется значение по умолчанию 1
. Обратите внимание, что элемент с индексом start
будет включен в результирующий подсписок, а элемент с индексом end
не будет. Первый элемент списка имеет индекс 0
.
Пример без параметра step
:
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.