Перейти к содержимому

Sequence python что это

  • автор:

Получение среза sequence[i:j] в Python

Результатом будет срез/часть последовательности sequence от индекса i до индекса j . Операцию еще называют «получить срез последовательности». Дополнительно смотрите встроенную функцию slice() .

Индексирование последовательностей всегда начинается с 0 .

Если индексы среза i и j отрицательны, то индексы будут считаться относительно конца последовательности sequence . В этом случае положительные индексы такого же среза можно посчитать по формулам len(sequence) — i и len(sequence) — j . Обратите внимание, что -0 по-прежнему будет 0 .

Срез последовательности sequence по индексам от i до j определяется как последовательность элементов с индексами в диапазоне i

  • Если индексы i или j больше len(sequence) , то вместо этих значений будет использоваться len(sequence) .
  • Если значение индекса i опущено или отсутствует, то используется i = 0 .
  • Если значение индекса j опущено или отсутствует, то используется j = len(sequence) .
  • Если i >= j , то получим пустой срез.

Эта операция поддерживаются большинством типов последовательностей, как изменяемых, так и неизменяемых.

Примечание: Множества set не поддерживает индексирование элементов, т.к. это неупорядоченная коллекция без повторяющихся элементов.

  • встроенную функцию slice() ;
  • Подробное руководство по индексам и срезам в Python.

Примеры получения среза.

>>> x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] >>> x[5:] # [5, 6, 7, 8, 9, 10, 11, 12, 13, 14] >>> x[-5:] # [10, 11, 12, 13, 14] >>> x[:10] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> x[:-10] # [0, 1, 2, 3, 4] >>> x[2:10] # [2, 3, 4, 5, 6, 7, 8, 9] >>> x[-10:-2] # [5, 6, 7, 8, 9, 10, 11, 12] # j > длины последовательности >>> x[2:20] # [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] # Если i >= j, то получим пустой срез. >>> x[10:8] # [] 
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Проверка существования значения в последовательности Python
  • Конкатенация (сложение) последовательностей
  • Увеличение последовательности в N раз
  • Получение значения элемента по индексу sequence[i]
  • Получение среза sequence[i:j]
  • Получение среза с заданным шагом sequence[i:j:k]
  • Вычисление длины последовательности
  • Наименьшее значение последовательности Python
  • Наибольшее значение в последовательности Python
  • Метод последовательности index()
  • Метод последовательности count()

Sequence (последовательность)

Последовательности могут быть как изменяемыми, так и неизменяемыми. Размерность и состав созданной однажды неизменяемой последовательности не может меняться, вместо этого обычно создаётся новая последовательность.

Последовательности поддерживают сравнение (обычно производится лексикографически).
Пользовательские последовательности подчиняются Протоколу последовательностей.

Примеры последовательностей в стандартной библиотеке:

Список (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']

На заметку

Сравнение различных типов внутри последовательности (при помощи > и <) поддерживается, если для типов определены методы сравнения. В противном случае возбуждается 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 (кортеж) Кортеж — неизменяемая последовательность с упорядоченными элементами.
xrange Диапазон — неизменяемая последовательность целых чисел.

Чем отличаются понятия iterable и sequence?

Не могу понять, чем отличаются понятия «итерируемый» и «последовательность» в Python. Поясните пожалуйста.

Отслеживать
48.6k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 19 сен 2019 в 9:59
Andrey Rafalsky Andrey Rafalsky
239 1 1 серебряный знак 5 5 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Итерируемый объект (iterable) позволяет последовательно просмотреть свои элементы. Но возможности обратиться к произвольному элементу может не быть.

Последовательность (sequence) — это итерируемый объект, к элементам которого можно обратиться по целочисленному индексу, а также можно узнать общее количество элементов (длину последовательности).

  • list , tuple , str — это последовательности
  • функции-генераторы, файловые объекты, объекты zip , iter , map и т.д. — итерируемые объекты (более конкретно — итераторы)
  • dict — является итерируемым объектом, но не является последовательностью (обращение к значениям не по целочисленному индексу, а по ключу, которым может быть любой хешируемый объект), если более конкретно — относится к mapping объектам.

Дополнительно о разнице итерируемого объекта (iterable) и итератора (iterator):

  • Iterator как и Iterable позволяет последовательно просмотреть свои элементы, но (обычно) только один раз (так называемое, исчерпание итератора, iterator exhausting). Так, например, ведут себя объекты, возвращаемые функциями map , zip , генераторы (функции, возвращающие значения через yield ), выражения-генераторы (generator expressions, аналог list comprehension, но с круглыми скобками вместо квадратных, или вообще без дополнительных скобок, если передаются напрямую в какую-то функцию).
  • С формальной точки зрения Iterator должен реализовывать методы __iter__ и __next__ , а чтобы объект был Iterable , ему достаточно реализовать метод __iter__ . См. collections.abc.Iterable , collections.abc.Iterator . Таким образом, формально любой итератор является итерируемым объектом, т.к. реализует метод __iter__ , но не любой итерируемый объект является итератором (не у каждого Iterable реализован метод __next__ ). С практической точки зрения: у итерируемых объектов (не итераторов) метод __iter__ возвращает новый итератор (обычно — каждый раз новый, благодаря чему по итерируемому объекту можно итерироваться много раз), а у итератора __iter__ возвращает сам объект ( self ). Sequence (см. collections.abc.Sequence ) объекты также реализуют метод __iter__ (в числе прочих методов), поэтому являются Iterable , но как правило не являются итераторами.

Объекты типа mapping и sequence

Существует шесть типов последовательностей: строки, строки Unicode, списки, кортежи, буферы и объекты xrange Строковые литералы пишутся в одинарных или двойных кавычках: «xyzzy» , «frobozz». Строки в Юникоде во многом похожи на строки, но указываются с использованием символа «u»: u’abc ‘ , u’ def Списки – последовательность элементов в квадратных скобках, элементы разделены запятыми: .

Объекты типа mapping

Объекты типа mapping

Объект мапирования преобразует неизменные значения в произвольные объекты. Объекты типа mapping – изменяемые объекты. В настоящее время в Python существует только один стандартный тип мапирования – словарь.

Эмулирование типов контейнеров

Эмулирование типов контейнеров

Для реализации объектов-контейнеров могут быть определены следующие методы. Контейнеры обычно представляют собой последовательности (такие как списки или кортежи) или мапирования (например, словари), но могут также представлять и другие контейнеры. Первый набор методов используется либо для эмуляции (имитирования) последовательности, либо для эмуляции мапирования. Разница в том, что для последовательности, допустимые ключи должны быть целыми числами k, …

Объекты типа mapping и sequence

Объекты типа mapping и sequence

Типы объектов мапирования и последовательности Введение У Python существует два универсальных типа объекта container: тип мапирования (mapping) и тип последовательности (sequence). Архетипические примеры этих базовых типов данных – словарь и список.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *