На этом шаге мы рассмотрим основные операции над списками.
Обращение к элементам списка осуществляется с помощью квадратных скобок, в которых указывается индекс элемента. Нумерация элементов списка начинается с нуля. Выведем все элементы списка:
>>> arr = [1, "str", 3.2, "4"] >>> arr[0], arr[1], arr[2], arr[3] (1, 'str', 3.2, '4')
С помощью позиционного присваивания можно присвоить значения элементов списка каким-либо переменным. Количество элементов справа и слева от оператора = должно совпадать, иначе будет выведено сообщение об ошибке:
>>> х, y, z = [1, 2, 3] # Позиционное присваивание >>> х, y, z (1, 2, 3) >>> х, y = [1, 2, 3] # Количество элементов должно совпадать Traceback (most recent call last): File "<pyshell#86>", line 1, in <module> x, y = [1, 2, 3] # Количество элементов должно совпадать ValueError: too many values to unpack (expected 2)
В Python 3 при позиционном присваивании перед одной из переменных слева от оператора = можно указать звездочку. В этой переменной будет сохраняться список, состоящий из "лишних" элементов. Если таких элементов нет, то список будет пустым:
>>> х, у, *z = [1, 2, 3]; х, у, z (1, 2, [3]) >>> х, у, *z = [1, 2, 3, 4, 5]; х, у, z (1, 2, [3, 4, 5]) >>> х, у, *z = [1, 2]; х, у, z (1, 2, [ ]) >>> *х, у, z = [1, 2]; х, у, z ([], 1, 2) >>> х, *у, z = [1, 2, 3, 4, 5]; х, у, z (1, [2, 3, 4], 5) >>> *z, = [1, 2, 3, 4, 5]; z [1, 2, 3, 4, 5]
Так как нумерация элементов списка начинается с 0, индекс последнего элемента будет на единицу меньше количества элементов. Получить количество элементов списка позволяет функция len():
>>> arr = [1, 2, 3, 4, 5] >>> len(arr) # Получаем количество элементов 5 >>> arr[len(arr) - 1] # Получаем последний элемент 5
Если элемент, соответствующий указанному индексу, отсутствует в списке, то возбуждается исключение IndexError:
>>> arr = [1, 2, 3, 4, 5] >>> arr[5] # Обращение к несуществующему элементу Traceback (most recent call last) : File "<pyshell#99>", line 1, in <module> arr[5] # Обращение к несуществуоцему элементу IndexError: list index out of range
В качестве индекса можно указать отрицательное значение. В этом случае смещение будет отсчитываться от конца списка, а точнее - чтобы получить положительный индекс, значение вычитается из общего количества элементов списка:
>>> arr = [1, 2, 3, 4, 5] >>> arr[-1], arr[len(arr) -1] # Обращение к последнему элементу (5, 5)
Так как списки относятся к изменяемым типам данных, то мы можем изменить элемент по индексу:
>>> arr = [1, 2, 3, 4, 5] >>> arr[0] = 600 # Изменение элемента по индексу >>> arr [600, 2, 3, 4, 5]
Кроме того, списки поддерживают операцию извлечения среза, которая возвращает указанный фрагмент списка. Формат операции:
[<Начало>:<Конец>:<Шаг>]
Все параметры не являются обязательными. Если параметр <Начало> не указан, то используется значение 0. Если параметр <Конец> не указан, то возвращается фрагмент до конца списка. Следует также заметить, что элемент с индексом, указанном в этом параметре, не входит в возвращаемый фрагмент. Если параметр <Шаг> не указан, то используется значение 1. В качестве значения параметров можно указать отрицательные значения.
Теперь рассмотрим несколько примеров. Сначала получим поверхностную копию списка:
>>> аrr = [1, 2, 3, 4, 5] >>> m = arr[:]; m # Создаем поверхностную копию к выводим значения [1, 2, 3, 4, 5] >>> m is arr # Оператор is показывает, что это разные объекты False
Теперь выведем символы в обратном порядке:
>>> аrr = [1, 2, 3, 4, 5] >>> arr[: :-1] # Шаг -1 [5, 4, 3, 2, 1]
Выведем список без первого и последнего элементов:
>>> arr [1:] # Без первого элемента [2, 3, 4, 5] >>> arr [:-1] # Без последнего элемента [1, 2, 3, 4]
Получим первые два элемента списка:
>>> arr[0:2] # Символ с индексом 2 не входит в диапазон [1, 2]
А теперь получим последний элемент:
>>> arr[-1:] # Последний элемент списка [5]
И, наконец, выведем фрагмент от второго элемента до четвертого включительно:
>>> arr [1:4] # Возвращаются элементы с индексами 1, 2 и 3 [2, 3, 4]
С помощью среза можно изменить фрагмент списка. Если срезу присвоить пустой список, то элементы, попавшие в срез, будут удалены:
>>> arr = [1, 2, 3, 4, 5] >>> arr[1:3] = [6, 7] # Изменяем значения элементов с индексами 1 и 2 >>> arr [1, 6, 7, 4, 5] >>> arr [1:3] = [ ] # Удаляем элементы с индексами 1 и 2 >>> arr [1, 4, 5]
Соединить два списка в один список позволяет оператор +. Результатом объединения будет новый список:
>>> arr1 = [1, 2, 3, 4, 5]
>>> arr2 = [6, 7, 8, 9]
>>> arr3 = arr1 + arr2
>>> arr3
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Вместо оператора + можно использовать оператор +=. Следует учитывать, что в этом случае элементы добавляются в текущий список:
>>> arr = [1, 2, 3, 4, 5]
>>> arr += [6, 7, 8, 9]
>>> arr
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Кроме рассмотренных операций, списки поддерживают операцию повторения и проверку на вхождение. Повторить список указанное количество раз можно с помощью оператора *, а выполнить проверку на вхождение элемента в список позволяет оператор in:
>>> [1, 2, 3] * 3 # Операция повторения [1, 2, 3, 1, 2, 3, 1, 2, 3] >>>2 in [1, 2, 3, 4, 5], 6 in [1, 2, 3, 4, 5] # Проверка на вхождение (True, False)
На следующем шаге мы рассмотрим многомерные списки.