DevGang
Авторизоваться

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.

Источник:

#Python
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

Оплатив хостинг 25$ в подарок вы получите 100$ на счет

Получить