Python中列表、序列和切片的区别是什么?

45 投票
5 回答
53343 浏览
提问于 2025-04-15 23:14

Python里面有几种内置的数据类型,比如列表序列切片。它们之间有什么区别呢?我觉得这三种类型基本上都可以看作是C++和Java中的数组

5 个回答

10
  • 列表是一种序列类型,跟数组有点像。

  • 序列类型描述了一种功能更强的集合:

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

  • 切片是一种表示子数组(或者子字符串)的方式。

想了解更多... http://docs.python.org/glossary.html

95

你在问题中混合了很多不同的内容,所以我就回答一个不同的问题。

你现在问的是Python中一个非常重要的概念:iterable,简单来说,就是任何你可以用for elem in iterable这种方式来使用的东西。

iterable有三个子类:sequencegeneratormapping

  • 序列(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显式创建的,并且在各种循环结构中隐式使用。

18
  • list(列表)比普通的数组要强大得多。你可以在创建列表的时候,不用提前告诉它里面有多少个元素。你可以往列表里添加元素(用 appendpush),也可以从列表里删除元素(用 removepopdel)。列表里的元素可以是不同类型的,比如你可以有一个列表是 [1,'e', [3]],里面有数字、字母和另一个列表。你还可以创建递归列表,也就是列表里面可以包含自己。还有一个很酷的功能是切片(slice),这意味着你可以从一个列表中获取一个新列表,只包含你想要的几个元素。
  • slice 是一种在幕后使用的对象类型,用来处理更复杂的切片操作,比如 a[start:stop:step] 这种形式,具体可以通过 help(slice) 来了解。

“序列”并不是一种对象,更像是一些对象(比如 list)实现的一个非正式的接口。

撰写回答