Sequence (последовательность)
Последовательность — контейнер, элементы которого представляют собой некую последовательность.
Последовательности могут быть как изменяемыми, так и неизменяемыми. Размерность и состав созданной однажды неизменяемой последовательности не может меняться, вместо этого обычно создаётся новая последовательность.
Последовательности поддерживают сравнение (обычно производится лексикографически).
Пользовательские последовательности подчиняются Протоколу последовательностей.
Примеры последовательностей в стандартной библиотеке:
Доступ к значениям последовательностей производится при помощи индексов — целых чисел, означающих позиций элементов.
Нумерация индексов начинается с 0 (нуля).
Если по указанному индексу значение отсутствует, возбуждается исключение IndexError.
При сравнение используется лексикографический порядок, сравниваются два элемента, идущих друг за другом, начиная с первого. Вложенные последовательности одинакового типа сравниваются рекурсивно. Последовательности равны, если их элементы равны.
+py3.0 При лексикографическом сравнении для строк используются номера кодовых точек Юникода.
Проход по элементам последовательности производится при помощи for in:
Количество элементов в последовательности можно получить, используя функцию len().
Конкатенация двух последовательностей производится при помощи
Повторение (множение) элементов последовательностей производится при помощи
Пользовательским последовательностям по примеру таковых же из стандартной библиотеки рекомендуется реализовать следующие методы.
Последовательности поддерживают сравнение (обычно производится лексикографически).
Пользовательские последовательности подчиняются Протоколу последовательностей.
Примеры последовательностей в стандартной библиотеке:
Список (list) | изменяемая |
Кортеж (tuple) | неизменяемая |
Диапазон (range) | неизменяемая |
Строка (str, unicode) | неизменяемая |
Массив (array.array) | изменяемая |
Адресация элементов
Доступ к значениям последовательностей производится при помощи индексов — целых чисел, означающих позиций элементов.
Нумерация индексов начинается с 0 (нуля).
Если по указанному индексу значение отсутствует, возбуждается исключение IndexError.
my_tuple = (1, 2, 3)
my_tuple[0] # 1
my_tuple[10] # IndexError
Сравнение последовательностей
При сравнение используется лексикографический порядок, сравниваются два элемента, идущих друг за другом, начиная с первого. Вложенные последовательности одинакового типа сравниваются рекурсивно. Последовательности равны, если их элементы равны.
+py3.0 При лексикографическом сравнении для строк используются номера кодовых точек Юникода.
(1, 2, 3) < (1, 2, 4)
[1, 2, 3] < [1, 2, 4]
'ABC' < 'C' < 'Pascal' < 'Python'
(1, 2, 3, 4) < (1, 2, 4)
(1, 2) < (1, 2, -1)
(1, 2, 3) == (1.0, 2.0, 3.0)
(1, 2, ('aa', 'ab')) < (1, 2, ('abc', 'a'), 4)
# Python 2
[1, 'two'] < ['two', 1] # True
# Python 3
[1, 'two'] < ['two', 1] # TypeError: '<' not supported between instances of 'int' and 'str'
На заметку
Сравнение различных типов внутри последовательности (при помощи > и <) поддерживается, если для типов определены методы сравнения. В противном случае возбуждается TypeError (до +py3.0 порядок был произвольным, типы сравнивались по имени — list < str < tuple и т.д.). Например, численные типы сравниваются по их численному значению, то есть как
0==0.00
. Проход по элементам
Проход по элементам последовательности производится при помощи for in:
for item in [1, 2, 3]:
print(item)
Количество элементов
Количество элементов в последовательности можно получить, используя функцию len().
len([1, 2, 3]) # 3
Слияние (конкатенация)
Конкатенация двух последовательностей производится при помощи
+
. a = [3, 2, 1]
b = [4, 5, 6]
a + b # [3, 2, 1, 4, 5, 6]
Повторение
Повторение (множение) элементов последовательностей производится при помощи
*
. a = [1] * 5
a # [1, 1, 1, 1, 1]
b = [1, 2] * 3
b # [1, 2, 1, 2, 1, 2]
Рекомендуемые методы
Пользовательским последовательностям по примеру таковых же из стандартной библиотеки рекомендуется реализовать следующие методы.
Базовые | __contains__(), __iter__() |
Для изменяемых последовательностей | append(), count(), extend(), index(), insert(), pop(), remove(), reverse(), sort() |
Для поддержки слияния и повторения | __add__(), __iadd__(), __imul__(), __mul__(), __radd__(), __rmul__() |
На заметку
Для перегрузки математических операций (умножение — повторение, а сложение — конкатенация) следует использовать только указанные методы. Прочие методы для работы с числами реализовываться не должны.
Синонимы поиска: Sequence (последовательность), последовательность, последовательности
Статьи раздела
list (список) | Список — изменяемая последовательность с упорядоченными элементами. |
range (диапазон) | Диапазон — неизменяемая последовательность целых чисел. |
sequence.index | Ищет указанное значение в последовательности. |
str (строка) | Строка — базовый тип представляющий из себя неизменяемую последовател… |
tuple (кортеж) | Кортеж — неизменяемая последовательность с упорядоченными элементами. |
|
Диапазон — неизменяемая последовательность целых чисел. |
В разделе «Iterable (итерируемый)»:
Mapping (отображение)
sets (множества)
На заметку
У нас есть новостная группа в Telegram. Там же можно обсудить интересующие вопросы. Ссылка в самом низу страницы.