Python中列表,序列和切片之间的区别?

Ton*_*ony 23 python list definition sequence slice

这些内置的Python数据类型有什么区别:列表,序列切片?在我看来,这三者基本上代表了C++和Java调用数组.

Joc*_*zel 46

你在问题中混合了很多不同的东西,所以我只回答一个不同的问题;-P

您现在正在询问Python中最重要的界面之一:iterable- 它基本上是您可以使用的任何东西for elem in iterable.

iterable有三个子孙sequence,generatormapping.

  • 一个顺序是随机访问迭代一个.您可以询问序列中的任何项目,而无需使用之前的项目.使用此属性,您可以构建slices,一次为您提供多个元素.切片可以给你一个子序列:seq[from:until]和每个第n项:seq[from:until:nth].list,tuplestr所有有序列.

  • 如果通过键而不是整数位置进行访问,则会有映射.dict是基本的映射.

  • 最基本的可迭代是生成器.它不支持随机访问,因此不支持切片.您必须按照给定的顺序使用所有项目.生成器通常只在迭代它们时才创建它们的项目.创建的常用方法generators是生成器表达式.它们看起来与列表理解完全一样,例如圆括号除外(f(x) for x in y).调用使用该yield关键字的函数也会返回生成器.

所有迭代的通用适配器是迭代器.iterators与他们支持的最基本类型具有相同的界面,a generator.它们是通过调用iteriterable 显式创建的,并在各种循环结构中隐式使用.


bad*_*adp 11

  • list不仅仅是普通的数组.您可以在不提供项目数量的情况下初始化它们.你可以append/ push他们,你可以remove/ pop/ del他们的项目,你可以有不同类型的对象列表(例如,[1,'e', [3]]),你可以有递归列表...你可以切片列表,这意味着只获得一个新的列表一些项目.
  • slice是一种用于"幕后"的对象类型,用于处理a[start:stop:step]表单中的扩展切片help(slice).

"序列"不是一个对象,更像是一些非正式接口,有些对象就像list工具一样.

  • Python开发人员不这么认为:[`list`:内置的Python序列.尽管它的名称更像是其他语言中的数组而不是链表,因为对元素的访问是"O(1)`."(http://docs.python.org/py3k/glossary.html#term-名单) (5认同)
  • 也许更好的 C++ 类比是 std::vector,但异构的除外。 (2认同)

Jer*_*own 6

列表是序列,但序列不一定是列表.序列是支持序列接口的任何类型("协议").这是通过duck-typing而不是通过严格的继承层次结构来完成的.请注意,序列是容器,但容器不一定是序列.(顺序是顺序的!)

http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-tuple-buffer-xrange

切片对象通常通过语法sugar(foo[2:5])隐式创建,并提供给容器类型特殊方法(例如__getitem__),您可以覆盖它们.除非您创建自己的序列/容器,否则通常不必处理切片.

请参阅http://docs.python.org/reference/datamodel.html#specialnames

列表与阵列相当.我不确定,但我认为它在cPython中实现为一个动态扩展的数组.但是,界面使得它更像是一个C++ STL Vector,而不仅仅是一个普通的旧数组.


mik*_*iku 5

  • 列表是序列类型,类似于数组

  • 序列类型描述功能超集:

有六种序列类型:字符串,Unicode字符串,列表,元组,缓冲区和xrange对象。

  • slice是子数组(或子字符串)的一种表示法

阅读更多... http://docs.python.org/glossary.html