Получение среза 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 – изменяемые объекты. В настоящее время в Python существует только один стандартный тип мапирования – словарь.
![]()
Эмулирование типов контейнеров
Для реализации объектов-контейнеров могут быть определены следующие методы. Контейнеры обычно представляют собой последовательности (такие как списки или кортежи) или мапирования (например, словари), но могут также представлять и другие контейнеры. Первый набор методов используется либо для эмуляции (имитирования) последовательности, либо для эмуляции мапирования. Разница в том, что для последовательности, допустимые ключи должны быть целыми числами k, …
![]()
Объекты типа mapping и sequence
Типы объектов мапирования и последовательности Введение У Python существует два универсальных типа объекта container: тип мапирования (mapping) и тип последовательности (sequence). Архетипические примеры этих базовых типов данных – словарь и список.