列表
用方括号装一排东西,可以按位置取出其中一个。
它是什么
列表 是一排小格子。 可以按顺序装多个值。
一个 变量 通常记住一件东西。 列表让一个名字记住一排东西:全班分数、一组颜色、一星期的天气。
scores = [90, 85, 92]
print(scores[0]) # 90下标从 0 开始。
[1] 是第二个。
[-1] 是最后一个。
空列表写成 []。
里面一个格子都没有。
名字从哪来
列表的英文是 list,日常意思就是「清单」。 购物清单、名单、待办事项,都是 list。
编程里还有一个近亲叫数组 array。 数组常常要求格子里装同一类型,长度有时固定。 Python 的 list 更灵活:长度可以变,格子里也可以混装不同类型。 初学建议还是装同一类东西,更好想。
方括号 [] 是列表的外形。
下标从 0 开始,这个习惯来自 C 语言家族。
第一个位置离起点的距离是 0。
它怎么工作
超出范围会 IndexError。
空列表还去取 [0],也会失败。
见 调试。
添加和删除
append(x)加到末尾insert(i, x)插到位置 ipop()拿走最后一个pop(i)按位置拿走remove(x)按值删掉第一次出现的 x
scores.append(88)
scores.pop()删除后,后面的下标会前移。
可以用下标改某一个:
scores[1] = 88遍历、排序、切片
遍历用 for:
for s in scores:
print(s)也可以按下标走:
for i in range(len(scores)):
print(i, scores[i])sort() 会改原来的列表。
sorted() 给出新列表,原来的常保持不动。
它们也和 内置函数 有关。
切片取出一段。 左闭右开。
letters = ["a", "b", "c", "d"]
print(letters[1:3]) # ['b', 'c'][:2] 前两个。
[2:] 从下标 2 到末尾。
len(列表) 是元素个数。
in 可以问某样东西在不在清单里:
print(85 in scores)这和 查找 的想法连在一起。
in 通常从左到右问,很像顺序查找。
列表里还可以再放列表,变成表格。 那是 嵌套。
生活里在哪里
- 值日表:一排名字。
- 购物清单:可以在末尾追加,也可以划掉已经买的。
- 课表的一列:第 0 节、第 1 节……(如果从 0 数)。
- 相册:按顺序一页页翻。
- 火车车厢:第几节在第几个位置。
图书馆的书架更像「已经排好序的列表」。 那样才能用更快的查找法。
和相近概念的差别
字符串 也是一串,也能下标、切片、算长度。 字符串里的字通常不能直接改。 列表可以改某一个格子。
a[1] 是一个元素。
a[1:2] 是只含那一个元素的小列表。
类型不同,后面能做的事也不同。
以后还会见到别的装东西的办法。 初学先把列表用熟就够。
range 不是列表,但可以变成列表:list(range(3)) 得到 [0, 1, 2]。
常见误会
误会 1:从 1 开始数下标。
第一个是 [0]。
长度为 3 时,最后一个下标是 2。
误会 2:以为 sorted(a) 一定改掉 a。
sorted 通常给出新列表。
a.sort() 才改原来的。
误会 3:空列表还去取 [0]。
没有格子,不能取。
误会 4:remove 按位置删。
remove 按值删。
按位置请用 pop(i)。
误会 5:切片越界一定报错。
切片比较宽容,超出时常常得到较短的一段,甚至空列表。
单个下标越界才会 IndexError。
想知道更多
- 书:潘洪波《小学生 Python 趣味编程》(用成绩、名单这类生活清单练列表)。
- 书:埃里克·马瑟斯《Python 编程:从入门到实践》(列表是入门后最重要的一章之一,可和家长一起做清单小项目)。
未登录时不会保存学习进度