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

Нарезка Python Что такое нарезка на Python?

Эта статья была первоначально опубликована в том, что такое нарезка на Python? Нарезка в Python – это особенность … Теги с Python, программированием, начинающим, CodeNewie.

Эта статья была первоначально опубликована в Что такое нарезка на Python?

Нарезка в Python – это функция, которая обеспечивает доступ к частям последовательностей, таких как строки, кортежи и списки. Вы также можете использовать их для изменения или удаления элементов измененных последовательностей, таких как списки. Срезы также могут быть применены к сторонним объектам, таким как массивы Numpy, а также серии Pandas и рамки данных.

Нарезка позволяет чистить чистый, краткий и читаемый код.

В этой статье показано, как получить доступ, изменять и удалять элементы с помощью индексов и ломтиков, а также как использовать встроенный класс Slice ().

Индексация

Вы можете получить доступ к одному элементу последовательности Python (например, String, Tupple или List) с соответствующими целочисленными показателями. Индексы в Python основаны на нулевом уровне. Это означает, что индекс 0 соответствует первому (крайнему левому) элементу последовательности, 1 ко второму элементу, и так далее.

Давайте создадим одну строку, одну кортеж и один список, чтобы проиллюстрировать, как использовать индексы:

>>> str_ = 'Python is awesome!'
>>> str_
'Python is awesome!'
>>> tuple_ = (1, 2, 4, 8, 16, 32, 64, 128)
>>> tuple_
(1, 2, 4, 8, 16, 32, 64, 128)
>>> list_ = [1, 2, 4, 8, 16, 32, 64, 128]
>>> list_
[1, 2, 4, 8, 16, 32, 64, 128]

Индексы предоставляются внутри кронштейнов, то есть с синтаксической последовательности [индекс]:

>>> str_[0]
'P'
>>> str_[1]
'y'
>>> str_[4]
'o'
>>> tuple_[0]
1
>>> tuple_[1]
2
>>> tuple_[4]
16
>>> list_[0]
1
>>> list_[1]
2
>>> list_[4]
16

Как вы можете видеть, «P» – первый символ строки «Python потрясающий!» и это соответствует индексу 0, «y» является вторым и имеет индекс 1 и так далее.

Это очень похоже на кортежи и списки.

Python предоставляет возможность использовать негативные целочисленные индексы. Это кажется очень полезным на практике, особенно если вы хотите получить доступ к последнему (самым правому) элементу последовательности.

Индекс -1 соответствует последним элементе -2 на второй последний, и так далее:

>>> str_[-1]
'!'
>>> str_[-2]
'e'
>>> str_[-5]
's'
>>> tuple_[-1]
128
>>> tuple_[-2]
64
>>> tuple_[-5]
8
>>> list_[-1]
128
>>> list_[-2]
64
>>> list_[-5]
8

Как вы можете видеть, персонаж «!» это последний элемент в строке ‘ Python потрясающий! И это соответствует индексу -1. Он также имеет индекс 17, который является String_ [17] Возврат «!». Персонаж «E» происходит прямо перед ним и имеет индекс -2 и 16.

Опять же, кортежи и списки ведут себя аналогично.

Вы можете использовать индексы для изменения элементов изменчивой последовательности. В Python строки и кортежи неизменяются, но списки измеряются:

>>> list_[-1] = 100
>>> list_
[1, 2, 4, 8, 16, 32, 64, 100]

Этот пример изменяет последний элемент списка на 100. Поскольку этот список имеет восемь элементов, вы также можете получить доступ к последнему элементу с помощью индекса 7 на основе нуля, то есть вы можете выполнить тот же эффект с утверждением.

Нарезка

Нарезка аналогична индексированию, но возвращает последовательность предметов вместо одного элемента. Индексы, используемые для нарезки, также на основе нуля.

Существует два варианта синтаксиса нарезов: последовательность [Start: Stop] и последовательность [Start: Stop: Step]. Эта статья объясняет оба.

Когда вы используете синтаксическую последовательность [Пуск: Stop], вы получите новую последовательность. Он начнет с элемента, который имеет начало индекса (включительно) и заканчивается перед тем, как элемент с остановкой индекса. Другими словами, последовательность операторов [Start: Stop] возвращает последовательность элементов [Start], последовательность [Stop-1] и все элементы между ними:

>>> str_[1:5]
'ytho'
>>> tuple_[2:4]
(4, 8)
>>> tuple_[2:3]
(4,)
>>> tuple_[2:2]
()

Как видите, возвращающаяся последовательность может содержать только один элемент при запуске + 1 или его может быть пустой последовательностью при запуске.

Когда вы опускаете запуск, значение 0 принимается, то есть полученная последовательность начинается в начале оригинала:

>>> str_[:2]
'Py'
>>> tuple_[:4]
(1, 2, 4, 8)

Если вы опускаете остановку, полученная последовательность останавливается в конце оригинала:

>>> str_[2:]
'thon is awesome!'
>>> tuple_[4:]
(16, 32, 64, 128)

Постоянно, вы можете опустить как начать, так и остановить:

>>> str_[:]
'Python is awesome!'
>>> tuple_[:]
(1, 2, 4, 8, 16, 32, 64, 128)
>>> list_[:]
[1, 2, 4, 8, 16, 32, 64, 100]

Вот как вы получаете неглубокую копию последовательности.

Можно применить отрицательные значения запуска и остановки, как с индексами:

>>> str_[-8:]
'awesome!'
>>> tuple_[:-1]
(1, 2, 4, 8, 16, 32, 64)
>>> tuple_[-4:-2]
(8, 16)
>>> tuple_[3:5]
(8, 16)

В случае TUPLE_, значение -4 – при подсчетах от -1 – соответствует тому же элементу, что и значение 3 при подсчете вперед от 0. Это то же самое для значений 5 и -2. Опять же, элемент, который соответствует остановке индекса, не включен в полученную последовательность.

Синтаксическая последовательность [Пуск: Stop: Step] аналогична, но с еще несколькими деталями.

Вы можете использовать шаг, чтобы указать шаг, если хотите пропустить некоторые элементы:

>>> tuple_[1:5:2]
(2, 8)

В этом примере этап – 2, поэтому вы начинаете с элемента, который имеет индекс 1 (элемент 2), соберите каждый второй элемент, и останавливаться, прежде чем добраться до элемента с помощью индекса 5 (32). Вы принимаете товар 2, пропустить 4 и взять 8.

Если шаг положительный, и вы опускаете начало, полученная последовательность снова начинается в начале оригинала. Если вы опускаете остановку, операция останавливается в конце оригинала. Однако, если вы опустите шаг, он считается 1, и вы получаете то же поведение, что и при синтаксической последовательности [Пуск: Stop]:

>>> tuple_[:6:2]
(1, 4, 16)
>>> tuple_[3::2]
(8, 32, 128)
>>> tuple_[1:5:]
(2, 4, 8, 16)

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

>>> tuple_[4:1:-1]
(16, 8, 4)
>>> tuple_[6:1:-2]
(64, 16, 4)

В случаях с отрицательным шагом и опущенным запуском, полученная последовательность начинается в конце оригинала. Если вы опустите, чтобы остановиться, операция останавливается в начале оригинала:

>>> tuple_[:2:-1]
(128, 64, 32, 16, 8)
>>> tuple_[5::-1]
(32, 16, 8, 4, 2, 1)

Эти правила удобно применяются, чтобы получить мелкую копию последовательности с элементами в обратном порядке, пропуская и, как начало, и остановку:

>>> tuple_[::-1]
(128, 64, 32, 16, 8, 4, 2, 1)

Вы можете использовать срезы для изменения элементов изменяющихся последовательностей:

>>> list_[1:6:2]
[2, 8, 32]
>>> list_[1:6:2] = [20, 80, 320]
>>> list_
[1, 20, 4, 80, 16, 320, 64, 100]

В этом примере предметы с индексами 1, 3 и 5 доступны и изменены.

Если вы используете синтаксическую последовательность [Пуск: Stop], можно заменить часть последовательности с меньшим или большей:

>>> list_[1:5]
[20, 4, 80, 16]
>>> list_[1:5] = [0, 0]
>>> list_
[1, 0, 0, 320, 64, 100]

В этом примере удаляются четыре элемента ([20, 4, 80, 16]), и вместо этого добавляются два новых ([0, 0]).

Следуя этой логике, вы можете удалить части мусорных последовательностей, заменив их пустыми последовательностями, такими как []:

>>> list_[1:3]
[0, 0]
>>> list_[1:3] = []
>>> list_
[1, 320, 64, 100]

Также можно удалить части последовательностей, используя срезы в операторе DEL:

>>> list_[:2]
[1, 320]
>>> del list_[:2]
>>> list_
[64, 100]

Таким образом, есть два подхода, чтобы удалить часть списка. Тем не менее, последний кажется более читаемым и легко понятным, потому что использование заявления DEL делает ваше намерение (чтобы что -то удалить) очевидным.

Что такое ломтики?

Срезы-это экземпляры встроенного класса среза Python. Вы создаете их с помощью ломтика оператора (запуск, остановка, шаг). Можно передать экземпляр среза вместо начала: остановите: шаг или запуск: остановите:

>>> s = slice(1, 5, 2)
>>> s
slice(1, 5, 2)
>>> s.start, s.stop, s.step
(1, 5, 2)
>>> tuple_[s]
(2, 8)

Опять же, вы можете опустить шаг и получить поведение начала: Стоп:

>>> s = slice(1, 5)
>>> s.start, s.stop, s.step
(1, 5, None)
>>> tuple_[s]
(2, 4, 8, 16)

Если вы передаете один аргумент, Slice использует его как остановку и ведет себя как: Stop:

>>> s = slice(5)
>>> s.start, s.stop, s.step
(None, 5, None)
>>> tuple_[s]
(1, 2, 4, 8, 16)

Вы можете манипулировать ломтиками внутри функций и методов:

>>> def get_items_with_slice(sequence, start, stop, step):
...     return sequence[slice(start, stop, step)]
... 
>>> get_items_with_slice([1, 2, 4, 8, 16, 32, 64, 128], 1, 5, None)
[2, 4, 8, 16]

Эта функция использует свои собственные аргументы для создания среза и передает его, чтобы получить некоторые данные из последовательности.

Наконец, вот пример того, как вы можете использовать срезы в сочетании с специальным методом Python _ getite _ () Чтобы определить класс, экземпляры которых можно использовать с уведомлением индекса:

>>> class C:
...     def __init__(self, *args):
...         self.__data = args
...     def __getitem__(self, index_or_slice):
...         print('index or slice:', index_or_slice)
...         return self.__data[index_or_slice]
... 
>>> x = C(1, 2, 4, 8, 16, 32, 128)
>>> x[4]
index or slice: 4
16
>>> x[1:5:2]
index or slice: slice(1, 5, 2)
(2, 8)

Если вы передаете целое число в __getItem __ () это будет вести себя как индекс себя. данные. Если вы проходите старт: Stop: Step вместо, ` getItem __ () `на самом деле получает объект Slice в качестве аргумента.

Вы также можете использовать __setitem __ () изменять данные и __delitem __ () Чтобы удалить данные, потенциально в сочетании с ломтиками.

Выводы

Эта статья показывает, как использовать срезы в Python. Они очень мощные и полезны, когда вам нужно извлечь элементы из последовательностей, таких как строки, кортежи и списки. Также, Некоторые сторонние объекты, такие как Numpy Armays и серии Panda и кадры данных.

Вы можете использовать срезы внутри функций и методов. Если вы хотите определить классы с возможностью доступа, изменения или удаления данных с помощью экземпляра [index_or_slice], вам следует реализовать специальные методы __getItem __ (), __setItem __ () или __delitem __ () и, возможно, применить кусочки.

Спасибо за чтение!

Оригинал: “https://dev.to/duomly/what-is-slicing-in-python-58f2”