Но срезы не так просты как кажется, их можно использовать и для изменения оригинального списка так же как мы это делаем просто по индексу.
Для примера возьмем простой список
ls = [1, 2, 3, 4, 6]
И поехали!>>> ls[-1] = 5
[1, 2, 3, 4, 5]
Обычное изменение по индексу.>>> ls[2:4]
[3, 4]
Обычный срез который создаёт новый список на основе старого.>>> ls[::-1]
[5, 4, 3, 2, 1]
Реверс списка, тоже создаёт новый. Оригинальный список остался без изменений.Воспользуемся оператором присвоения:
>>> ls[2:4] = [7, 8]
[1, 2, 7, 8, 5]
Заменили диапазон элементов в оригинальном списке.>>> ls[4:] = [0, 0, 0, 0]
[1, 2, 7, 8, 0, 0, 0, 0]
Указав диапазон сверх имеющегося мы расширили список по аналогии с методом extend(), но при этом еще и немного захватили конец списка. Всё это в одно действие!>>> ls[:0] = [9, 8, 7]
[9, 8, 7, 1, 2, 7, 8, 0, 0, 0, 0]
Добавили элементы в начало>>> del ls[-4:]
[9, 8, 7, 1, 2, 7, 8]
Удалили часть элементов списка>>> ls[1:3] = []
[9, 1, 2, 7, 8]
Еще один способ удалить элементы>>> ls[:] = []
А этим способом можно пользоваться для очистки списка в Python2, в котором еще не было метода clear().Кажется мы "потратили" весь наш список)))
Сделаем новый и продолжим.
>>> ls = [1, 2, 3, 4, 5, 6]
>>> ls[::2] = [7,8,9]
[7, 2, 8, 4, 9, 6]
И конечно же мы можем использовать шаг в срезе, но тут требуется соблюдать количество подаваемых элементов. Заменять элементы с каким-то шагом можно, а добавлять нельзя.s = slice(3, 4)
Как было показано ранее, срез можно сохранять как переменную и использовать в дальнейших манипуляциях>>> ls[s] = [0]*5
[7, 2, 8, 0, 0, 0, 0, 0, 9, 6]
Заменили один элемент на несколько элементов, расширив исходный список из центра.И напоследок. Следующие два действия равнозначны и дадут одинаковый результат — полная замена списка.
>>> ls[:] = [1,2,3,4]
>>> ls = [1,2,3,4]
#tricks