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

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

В таблице ниже приведены примеры получения отдельных элементов и последовательностей по срезу. Указывая индексы и шаг можно извлекать нужную часть списка. Запись среза имеет вид obj[[start]:[stop][:[step]]], где start -верхняя граница, stop - нижняя граница, step - шаг.

Операция Результат Описание
a[0] 0 первый элемент
a[:3] [0, 1, 2] первые 3 элемента
a[5:] [5, 6, 7, 8, 9] с 5-го элемента и до конца
a[2:7] [2, 3, 4, 5, 6] со 2-го по 7-й элемент не включительно
a[-1] 9 последний элемент
a[:-3] [0, 1, 2, 3, 4, 5, 6] все без 3-х последних элементов
a[-3:] [7, 8, 9] 3 последние элемента
a[2:-2] [2, 3, 4, 5, 6, 7] без первых и последних 2-х элементов
a[-5:-3] [5, 6] 5 последних элементов без 3-х с конца
a[::2] [0, 2, 4, 6, 8] все элементы с шагом 2
a[::-2] [9, 7, 5, 3, 1] все элементы с шагом 2 с конца
a[::-1] [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] переворачивает список
a[2:7:2] [2, 4, 6] со 2-го по 7-й элемент с шагом 2
a[7:2:-2] [7, 5, 3] со 7-го по 2-й элемент с шагом 2 с конца

Таким же образом можно изменять последовательности. Например a[2:5] = [0, 0] изменит список a на [0, 1, 0, 0, 5, 6, 7, 8, 9]. Теперь немного усложним - пусть нужно обнулить все четные элементы. Сделать это можно так a[::2] = [0] * 5 (операция [0] * 5 создает список [0, 0, 0, 0, 0]), в результате последовательность a будет такой [0, 2, 0, 4, 0, 6, 0, 8, 0].