Различие между списком, последовательностью и частью в Python?

Что является различиями между этими встроенными типами данных Python: список, последовательность и часть? Поскольку я вижу его, все три по существу представляют то, что C++ и Java называют массивом.

23
задан SilentGhost 27 May 2010 в 11:32
поделиться

5 ответов

  • list - это больше, чем простые массивы. Вы можете инициализировать их, не указывая количество элементов. Вы можете добавить к ним / push , вы можете удалить из них элементы / pop / del , вы могут иметь списки различных типов объектов (например, [1, 'e', ​​[3]] ), вы можете иметь рекурсивные списки ... и вы можете разрезать списки, что означает получение нового списка только с некоторыми из предметов.
  • slice - это тип объекта, используемый «за кулисами» для обработки расширенного нарезания в форме a [start: stop: step] , как help (slice) показывает.

«Последовательность» - это не объект, а скорее неформальный интерфейс, который реализует некоторые объекты, такие как список .

11
ответ дан 29 November 2019 в 00:56
поделиться

Строго говоря, срез - это тип, который представляет диапазон индексов, например начало, остановка и шаг. Срез вообще не является контейнером. Вы можете использовать срез для индексации списка, в результате чего создается новый список, который является копией подсписка исходного списка.

Списки отличаются от массивов C ++ тем, что они неоднородны; элементы не обязательно должны быть одного типа. И как MYYN уже указывал, «последовательность» - это вовсе не тип Python, а, скорее, описание множества встроенных типов.

2
ответ дан 29 November 2019 в 00:56
поделиться

Вы смешиваете очень разные вещи в своем вопросе, поэтому я просто отвечу на другой вопрос ;-P

Теперь вы спрашиваете об одном из самый важный интерфейс в Python: iterable - это практически все, что вы можете использовать, например для элемента в iterable .

iterable имеет трех потомков: последовательность , генератор и отображение .

  • Последовательность является итерируемой с произвольным доступом. Вы можете попросить любой элемент последовательности, не потребляя предметы перед ним. С помощью этого свойства вы можете создавать срезов , которые дают вам более одного элемента одновременно. Срез может дать вам подпоследовательность: seq [от: до] и каждый n-й элемент: seq [от: до: nth] . list , tuple и str - все это последовательности.

  • Если доступ осуществляется с помощью ключей, а не целочисленных позиций, у вас есть отображение . dict - это базовое отображение.

  • Самая простая итерация - это генератор . Он не поддерживает произвольный доступ и, следовательно, нарезку. Вы должны потреблять все предметы в том порядке, в котором они указаны. Генератор обычно создает свои элементы только тогда, когда вы перебираете их.Обычный способ создания генераторов - это выражения генераторов. Они выглядят точно так же, как понимание списков, за исключением круглых скобок, например (f (x) вместо x в y) . Вызов функции, использующей ключевое слово yield , также возвращает генератор.

Общим адаптером для всех итераций является итератор . итераторы имеют тот же интерфейс, что и самый базовый тип, который они поддерживают, - генератор . Они создаются явно путем вызова iter для итерации и используются неявно во всех видах конструкций цикла.

46
ответ дан 29 November 2019 в 00:56
поделиться
  • списки - это тип последовательности, похожий на массив

  • типы последовательности описывают функциональное супермножество:

Существует шесть типов последовательностей: строки, строки Unicode, списки, кортежи, буферы и объекты xrange.

  • slices - это обозначение для подмассивов (или подстрок, также)

Читать далее ... http://docs.python.org/glossary.html

5
ответ дан 29 November 2019 в 00:56
поделиться

Список - это последовательность, но последовательность не обязательно является списком.Последовательность - это любой тип, который поддерживает интерфейс последовательности («протокол»). Это делается с помощью утиной типизации, а не с помощью строгой иерархии наследования. Обратите внимание, что последовательности являются контейнерами, но контейнеры не обязательно являются последовательностями. (последовательности, ну, последовательные!)

См. 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, чем на простой старый массив.

6
ответ дан 29 November 2019 в 00:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: