Шаг 63.
Основы языка Python.
Списки, кортежи, множества и диапазоны. Операции над списками

    На этом шаге мы рассмотрим основные операции над списками.

    Обращение к элементам списка осуществляется с помощью квадратных скобок, в которых указывается индекс элемента. Нумерация элементов списка начинается с нуля. Выведем все элементы списка:

>>> 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)

    На следующем шаге мы рассмотрим многомерные списки.




Предыдущий шаг Содержание Следующий шаг