Вы можете получить часть списка, называемую «срезом», указав два индекса. В результате получается новый список, включающий в себя элементы исходного в том же порядке, начиная с первого индекса среза (в данном случае a_list[1]), до последнего, но не включая его (в данном случае a_list[3]).
②
Срез работает, даже если один или оба индекса отрицательны. Если вам это поможет, можете думать об этом так: список читается слева направо, первый индекс среза определяет первый нужный вам элемент, а второй индекс определяет первый элемент, который вам не нужен. Возвращаемое значение всегда находится между ними.
③
Нумерация списков начинается с нуля, поэтому a_list[0: 3] возвращает первые три элемента списка, начиная с a_list[0], заканчивая на (но не включая) a_list[3].
④
Если левый индекс среза — 0, вы можете опустить его, 0 будет подразумеваться. Так, a_list[: 3] — это то же самое, что и a_list[0: 3], потому что начальный 0 подразумевается.
⑤
Аналогично, если правый индекс среза является длиной списка, вы можете его опустить. Так, a_list[3: ] — это то же самое, что и a_list[3: 5], потому что этот список содержит пять элементов. Здесь прослеживается явная симметрия. В этом пятиэлементном списке a_list[: 3] возвращает первые 3 элемента, а a_list[3: ] возвращает последние два элемента. На самом деле, a_list[: n] всегда будет возвращать первые n элементов, а a_list[n: ] будет возвращать все остальные, независимо от длины списка.
⑥
Если оба индекса списка опущены, включаются все элементы списка. Но это не то же самое, что первоначальная переменная a_list. Это новый список, включающий все элементы исходного. Запись a_list[: ] представляет собой простейший способ получения полной копии списка.
Добавление элементов в список
Существует четыре способа добавить элементы в список.
Оператор + соединяет списки, создавая новый список. Список может содержать любое число элементов; ограничений размера не существует (пока есть доступная память). Однако, если вы заботитесь о памяти, знайте, что сложение списков создает ещё один список в памяти. В данном случае, этот новый список немедленно присваивается существующей переменной a_list. Так что эта строка кода, на самом деле, реализует двухэтапный процесс — сложение, а затем присвоение — который может (временно) потребовать много памяти, если вы имеете дело с большими списками.
②
Список может содержать элементы любых типов, и элементы одного списка не обязательно должны быть одного и того же типа. Здесь мы видим список, содержащий строку, число с плавающей точкой и целое число.
③
Метод append() добавляет один элемент в конец списка. (Теперь у нас в списке присутствуют четыре различных типа данных! )
④
Списки реализованы как классы. «Создание» списка — это фактически создание экземпляра класса. Т. о., список имеет методы, которые работают с ним. Метод extend() принимает один аргумент — список, и добавляет каждый его элемент к исходному списку.
⑤
Метод insert() вставляет элемент в список. Первым аргументом является индекс первого элемента в списке, который будет сдвинут новым элементом со своей позиции. Элементы списка не обязаны быть уникальными; например, теперь у нас есть два различных элемента со значением 'Ω ': первый элемент a_list[0] и последний элемент a_list[6].
В Python конструкция a_list. insert(0, value) действует как функция unshift() в Perl. Она добавляет элемент в начало списка, а все другие элементы увеличивают свой индекс на единицу, чтобы освободить пространство.
Давайте подробнее рассмотрим разницу между append() и extend().
Метод extend() принимает один аргумент, который всегда является списком, и добавляет каждый элемент этого списка к a_list.
②
Если вы возьмёте список из трёх элементов и расширите его списком из ещё трёх элементов, в итоге получится список из шести элементов.
③
С другой стороны, метод append() получает единственный аргумент, который может быть любого типа. Здесь мы вызываем метод append(), передавая ему список из трёх элементов.
④
Если вы возьмёте список из шести элементов и добавите к нему список, в итоге вы получите... список из семи элементов. Почему семь? Потому что последний элемент (который мы только что добавили) является списком. Списки могут содержать любые типы данных, включая другие списки. Возможно, это то, что вам нужно, возможно, нет. Но это то, что вы просили, и это то, что вы получили.