学径 LearnPath

编程语言基础 / Wiki

列表

一排有顺序、可以改写的值;位置用从零开始的下标标明。

它是什么

列表 把多个值按顺序放在一起,用方括号写成。每一个位置有一个下标,从 0 开始。列表可以变长、可以改某一格,适合装「一组还可能增减的东西」:一组系数、一列观测、一组坐标。顺序在这里是结构的一部分:第几个,往往对应测量次序或排列中的位置。

python
scores = [90, 85, 72]
scores.append(88)
print(scores[0])

能变,是列表相对 元组 的关键差别。需要「第几个」时用列表;需要去重且不在乎顺序时,见 集合。

名字从哪来

list 就是「清单」。购物清单、名单、待办,都是有次序的一排。Python 的列表是动态数组这一类结构的实现:逻辑上是序列,实际存放时可以在尾部高效追加。下标从零开始,来自以偏移量计数的传统:第一个元素的偏移是 0。这和日常「第一项」从 1 数起不一样,阅读时需要按偏移理解,而不是按序数习惯去猜。

它怎么工作

用下标取值、赋值。下标超出范围会引发 异常。空列表 [] 长度为 0,不能取 scores[0]。append 在末尾加一项;切片 scores[1:3] 取出一段(右端不含)。for item in scores 按顺序遍历,不必自己写计数器,见 循环。

列表里的元素可以是不同 类型,也可以再装列表。list2 = list1 只是两个名字指向同一份列表,改其中一个名字看到的内容,另一个也会变。真要互不影响的副本,需要另做拷贝。把别名当成复制,是阅读涉及列表的程序时最常见的模型错误之一。

生活里在哪里

值日表有顺序,某一天可以换成另一个人;实验数据按测量次序排列,允许更正某一格;待处理的样本可以往队列里追加。名单若常按学号查找,字典 更合适;若常按先后次序处理,列表更合适。生活里的清单几乎都允许改写——这正是列表的默认承诺,也是它不适合表示「一经观测就不该被偷偷改掉的成套读数」的原因。

和相近概念的差别

列表可变。元组一旦写好,元素不能改,适合表示一个点的坐标这种不该被中途拆改的组合。字典用键取值,不靠位置。集合不保留重复,也不保证次序。

两个列表「平行地」一个装名字一个装分数,能凑合用,但容易对错位。需要把一对锁在一起时,字典更诚实。选择哪一种容器,就是在选择问题里「顺序、唯一性、按名查找」何者才是结构。

常见误会

误会 1:第一个元素是 scores[1]。

第一个是 scores[0]。长度为 nn 时,合法下标是 00 到 n−1n-1。

误会 2:空列表上取第一项,会得到 None。

会报 IndexError。先判断长度是否为 0,这是边界。

误会 3:list2 = list1 得到一份互不影响的副本。

这样只是两个名字指向同一份列表。见 变量 与 对象。

想知道更多

  • 书:布鲁克希尔《计算机科学概论》
  • 书:埃里克·马瑟斯《Python编程:从入门到实践(第3版)》
  • 书:艾伦·唐尼《像计算机科学家一样思考Python(第2版)》

未登录时不会保存学习进度