Что является различиями между этими встроенными типами данных Python: список, последовательность и часть? Поскольку я вижу его, все три по существу представляют то, что C++ и Java называют массивом.
list
- это больше, чем простые массивы. Вы можете инициализировать их, не указывая количество элементов. Вы можете добавить к ним
/ push
, вы можете удалить из них элементы
/ pop
/ del
, вы могут иметь списки различных типов объектов (например, [1, 'e', [3]]
), вы можете иметь рекурсивные списки ... и вы можете разрезать списки, что означает получение нового списка только с некоторыми из предметов. slice
- это тип объекта, используемый «за кулисами» для обработки расширенного нарезания в форме a [start: stop: step]
, как help (slice)
показывает. «Последовательность» - это не объект, а скорее неформальный интерфейс, который реализует некоторые объекты, такие как список
.
Строго говоря, срез - это тип, который представляет диапазон индексов, например начало, остановка и шаг. Срез вообще не является контейнером. Вы можете использовать срез для индексации списка, в результате чего создается новый список, который является копией подсписка исходного списка.
Списки отличаются от массивов C ++ тем, что они неоднородны; элементы не обязательно должны быть одного типа. И как MYYN уже указывал, «последовательность» - это вовсе не тип Python, а, скорее, описание множества встроенных типов.
Вы смешиваете очень разные вещи в своем вопросе, поэтому я просто отвечу на другой вопрос ;-P
Теперь вы спрашиваете об одном из самый важный интерфейс в Python: iterable
- это практически все, что вы можете использовать, например для элемента в iterable
.
iterable
имеет трех потомков: последовательность
, генератор
и отображение
.
Последовательность является итерируемой с произвольным доступом. Вы можете попросить любой элемент последовательности, не потребляя предметы перед ним. С помощью этого свойства вы можете создавать срезов
, которые дают вам более одного элемента одновременно. Срез может дать вам подпоследовательность: seq [от: до]
и каждый n-й элемент: seq [от: до: nth]
. list
, tuple
и str
- все это последовательности.
Если доступ осуществляется с помощью ключей, а не целочисленных позиций, у вас есть отображение . dict
- это базовое отображение.
Самая простая итерация - это генератор . Он не поддерживает произвольный доступ и, следовательно, нарезку. Вы должны потреблять все предметы в том порядке, в котором они указаны. Генератор обычно создает свои элементы только тогда, когда вы перебираете их.Обычный способ создания генераторов
- это выражения генераторов. Они выглядят точно так же, как понимание списков, за исключением круглых скобок, например (f (x) вместо x в y)
. Вызов функции, использующей ключевое слово yield
, также возвращает генератор.
Общим адаптером для всех итераций является итератор . итераторы
имеют тот же интерфейс, что и самый базовый тип, который они поддерживают, - генератор
. Они создаются явно путем вызова iter
для итерации и используются неявно во всех видах конструкций цикла.
списки - это тип последовательности, похожий на массив
типы последовательности описывают функциональное супермножество:
Существует шесть типов последовательностей: строки, строки Unicode, списки, кортежи, буферы и объекты xrange.
Читать далее ... http://docs.python.org/glossary.html
Список - это последовательность, но последовательность не обязательно является списком.Последовательность - это любой тип, который поддерживает интерфейс последовательности («протокол»). Это делается с помощью утиной типизации, а не с помощью строгой иерархии наследования. Обратите внимание, что последовательности являются контейнерами, но контейнеры не обязательно являются последовательностями. (последовательности, ну, последовательные!)
См. http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-tuple-buffer-xrange
Объекты среза обычно создаются неявно с помощью синтаксического сахара ( foo [2: 5]
) и предоставляются специальным методам контейнерного типа (например, __ getitem __
), которые вы можете переопределить. Обычно вам не придется иметь дело с срезами, если вы не создаете свои собственные последовательности / контейнеры.
См. http://docs.python.org/reference/datamodel.html#specialnames
Списки сопоставимы с массивами. Я не уверен, но думаю, что он реализован в cPython как динамически расширяющийся массив. Однако интерфейс делает его больше похожим на вектор C ++ STL, чем на простой старый массив.