Оператор индексирования s[n] возвращает n-й объект в последовательности, где s[0] соответствует первому объекту. Для извлечения элементов, начиная с конца последовательности, допускается использовать отрицательные индексы. Например, выражение s[-1] вернет последний элемент. При попытке обратиться по индексу, выходящему за пределы последовательности, будет возбуждено исключение IndexError.
Оператор среза s[i:j] или s[i:j:step] позволяет извлекать фрагменты последовательности в диапазоне индексов от i до j, при необходимости указывается шаг step.
Если опустить начальный и/или конечный индекс, вместо них будут использованы значения начального и конечного индекса оригинальной последовательности соответственно. Отрицательные индексы отсчитываются относительно конца последовательности (-1 – это последний элемент, -2 – предпоследний и т.д.). При выходе индексов i и/или j за пределы последовательности в качестве их значений будут использованы значения начального и конечного индексов оригинальной последовательности соответственно (для среза).
Шаг step также может быть отрицательным числом.
Например:
a=list(range(0,8,1))
print (a[4:1:-1])
print (a[1:4:1])
Результат:
[4, 3, 2]
[1, 2, 3]
В Python принято, что элемент с первым индексом, i, входит в результат, а со вторым, j, - нет. Общее количество извлечённых элементов равно j-i (если точно, то целая часть от (j-i)/step).
Операторы in и not in проверяют присутствие объекта x в последовательности s. Они могут применяться для строк. Например, выражение’ hello’ in ‘hello world’ вернет значение True.
Функция sum(s) возвращает сумму всех элементов в последовательности s, но обычно может применяться только к последовательностям числовых значений. Дополнительно эта функция может принимать необязательное начальное значение. Обычно тип этого значения определяет тип результата. Например, вызов sum(items, decimal.Decimal(0)) вернет в результате объект типа Decimal.
Строки и кортежи являются неизменяемыми объектами и не могут изменяться после их создания. Списки могут изменяться с помощью следующих операторов:
Операция | Описание |
s[i] = x | Присваивание элементу с указанным индексом |
s[i:j] = r | Присваивание срезу последовательности r |
s[i:j:step] = r | Расширенная операция присваивания срезу |
del s[i] | Удаление элемента |
del s[i:j] | Удаление среза |
del s[i:j:step] | Расширенная операция удаления среза |
Последовательности могут сравниваться с помощью операторов <, >, <=, >=, == и!=. В этом случае сравниваются первые элементы двух последовательностей. Если они равны, сравниванию подвергаются вторые элементы последовательностей.
Функции и методы списков
list.append(x) Добавляет элемент в конец списка
list.extend(L) Расширяет список list, добавляя в конец все элементы списка L
list.insert(i, x) Вставляет на i-ый элемент значение x
list.remove(x) Удаляет первый элемент в списке, имеющий значение x. ValueError, если такого элемента не существует
list.pop([i]) Удаляет i-ый элемент и возвращает его. Если индекс не указан, удаляется последний элемент
list.index(x, [start [, end]]) Возвращает положение первого элемента со значением x (при этом поиск ведется от start до end)
list.count(x) Возвращает количество элементов со значением x
list.sort([key=функция]) Сортирует список на основе функции
list.reverse() Разворачивает список
list.copy() Поверхностная копия списка
list.clear() Очищает список
L.append (x) | Добавляет элемент х в конец списка L |
L.count(x) | Возвращает число вхождений элемента х в список L |
L.extend(m) L += m | Добавляет в конец списка L все элементы итерируемого объекта m; оператор += делает то же самое |
L.index(x, start, end) | Возвращает индекс самого первого (слева) вхождения элемента х в список L (или в срез start: end списка L), в противном случае возбуждает исключение ValueError |
L.insert(i, x) | Вставляет элемент х в список L на позицию i |
L.pop() | Удаляет самый последний элемент из списка L и возвращает его в качестве результата |
L.pop(i) | Удаляет из списка L элемент с индексом i и возвращает его в качестве результата |
L.remove(x) | Удаляет самый первый (слева) найденный элемент х из списка L или возбуждает исключение ValueError, если элемент х не будет найден |
L.reverse() | Переставляет в памяти элементы списка в обратном порядке |
L.sort(...) | Сортирует список в памяти. Этот метод принимает те же необязательные аргументы key и reverse, что и встроенная функция sorted() |
Удалить элемент с номером i можно с помощью среза:
L=L[:i]+L[i+1:]
Генераторы списков
Структура генератора списков:
<Список>=[<выражение> for <переменная> in <итератор> if <условие>]
Заданное выражение вычисляется для каждого значения переменной, которая последовательно принимает значения итератора. Необязательный параметр <условие> оставляет только те элементы, для которых условие истинно.
Пример:
L = [math.sin(у/100) for у in range(0, 100)]
Генераторы списков идеальны для выбора или удаления элементов списков по заданному условию, например:
L2=[x for x in L1 if not (30<x<70)]
Генераторы списков чудесным образом практически всегда выполняются значительно быстрее циклов. Также они записываются лаконичнее, хотя и выглядят несколько нестандартно. Поэтому можно рекомендовать заменять циклы на генераторы списков там, где это возможно.
Тип-диапазон
range(n1,n2,s) – задаёт арифметическую прогрессию от n1 до n2 с шагом 2. Особенностью типа является то, что элементы последовательности не хранятся в памяти. Хранится только первый, последний элемент, шаг и номер активного элемента.