Теоретический материал по теме "Списки"
Срезы
Д.П. Кириенко - Программирование на языке Python (школа 179 г. Москвы)
Со списками, так же как и со строками, можно делать срезы. А именно:
A[i:j] срез из j-i элементов
A[i], A[i+1], ..., A[j-1].
A[i:j:-1] срез из i-j элементов
A[i], A[i-1], ..., A[j+1]
(то есть меняется порядок элементов).
A[i:j:k] срез с шагом k:
A[i], A[i+k], A[i+2*k],... .
Если значение k<0, то элементы идут в противоположном порядке.
Каждое из чисел i или j может отсутствовать,
что означает “начало строки” или “конец строки”
Списки, в отличии от строк, являются изменяемыми объектами: можно отдельному элементу списка присвоить новое значение. Но можно менять и целиком срезы. Например:
A = [1, 2, 3, 4, 5]
A[2:4] = [7, 8, 9]
Получится список, у которого вместо двух элементов среза A[2:4]
вставлен новый список уже из трех элементов. Теперь список стал равен
[1, 2, 7, 8, 9, 5].
A = [1, 2, 3, 4, 5, 6, 7]
A[::-2] = [10, 20, 30, 40]
Получится список [40, 2, 30, 4, 20, 6, 10]. Здесь
A[::-2] — это список из элементов
A[-1], A[-3], A[-5], A-7,
которым присваиваются значения 10, 20, 30, 40 соответственно.
Если не непрерывному срезу (то есть срезу с шагом k, отличному
от 1), присвоить новое значение, то количество элементов в старом и новом срезе
обязательно должно совпадать, в противном случае произойдет ошибка ValueError.
Обратите внимание, A[i] — это элемент списка, а не срез!