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

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

5 Solutions collect form web for “Разница между списком, последовательностью и фрагментом в Python?”

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

«Последовательность» – это не объект, скорее как неформальный интерфейс, некоторые объекты, такие как реализация list .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Numpy: arr работает. Но как я могу хранить данные, содержащиеся в команде slice (..., 0, :)?
  • Расширенный срез, который начинается с начала последовательности с отрицательным шагом
  • Разница между = b и a = b ? (Python)
  • Проблема с синтаксисом среза списка в python
  • В чем разница между = b и a = b
  • Быстрое индексирование индексов
  • python создает объект slice из строки
  • Python pandas разбивает данные на несколько диапазонов индексов
  • Python - лучший язык программирования в мире.