Python中列表、序列和切片的区别是什么?
Python里面有几种内置的数据类型,比如列表、序列和切片。它们之间有什么区别呢?我觉得这三种类型基本上都可以看作是C++和Java中的数组。
5 个回答
列表是一种序列类型,跟数组有点像。
序列类型描述了一种功能更强的集合:
一共有六种序列类型:字符串、Unicode字符串、列表、元组、缓冲区和xrange对象。
- 切片是一种表示子数组(或者子字符串)的方式。
想了解更多... http://docs.python.org/glossary.html
你在问题中混合了很多不同的内容,所以我就回答一个不同的问题。
你现在问的是Python中一个非常重要的概念:iterable
,简单来说,就是任何你可以用for elem in iterable
这种方式来使用的东西。
iterable
有三个子类:sequence
、generator
和mapping
。
序列(sequence)是一种可以随机访问的可迭代对象。你可以直接请求序列中的任何一个元素,而不需要先获取前面的元素。因为这个特性,你可以创建
slices
,也就是一次获取多个元素的方式。切片可以让你得到一个子序列,比如seq[from:until]
,或者每隔n个元素获取一次,比如seq[from:until:nth]
。list
(列表)、tuple
(元组)和str
(字符串)都是序列。如果访问是通过键而不是整数位置来进行的,那就是映射(mapping)。
dict
(字典)就是最基本的映射。最基本的可迭代对象是生成器(generator)。生成器不支持随机访问,因此也不能进行切片。你必须按照给定的顺序逐个获取所有元素。生成器通常在你遍历它们时才会生成元素。创建
generators
的常见方式是生成器表达式。它们看起来和列表推导式一样,只不过用的是圆括号,比如(f(x) for x in y)
。调用一个使用yield
关键字的函数也会返回一个生成器。
所有可迭代对象的通用适配器是迭代器(iterator)。iterators
的接口和它们支持的最基本类型——生成器是一样的。它们是通过在可迭代对象上调用iter
显式创建的,并且在各种循环结构中隐式使用。
list
(列表)比普通的数组要强大得多。你可以在创建列表的时候,不用提前告诉它里面有多少个元素。你可以往列表里添加元素(用append
或push
),也可以从列表里删除元素(用remove
、pop
或del
)。列表里的元素可以是不同类型的,比如你可以有一个列表是[1,'e', [3]]
,里面有数字、字母和另一个列表。你还可以创建递归列表,也就是列表里面可以包含自己。还有一个很酷的功能是切片(slice),这意味着你可以从一个列表中获取一个新列表,只包含你想要的几个元素。slice
是一种在幕后使用的对象类型,用来处理更复杂的切片操作,比如a[start:stop:step]
这种形式,具体可以通过help(slice)
来了解。
“序列”并不是一种对象,更像是一些对象(比如 list
)实现的一个非正式的接口。