Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

"Последовательность" не является объектом, скорее похожим на неформальный интерфейс, на некоторые объекты, такие как list.

Ответ 2

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

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

iterable имеет три потомка: sequence, generator и mapping.

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

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

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

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

Ответ 3

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

См. 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 как динамически расширяющийся массив. Однако интерфейс делает его таким, что он больше похож на С++ STL Vector, чем на простой старый массив.

Ответ 4

  • списки - это тип последовательности, аналогичный массиву

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

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

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

Подробнее... http://docs.python.org/glossary.html

Ответ 5

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

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