学径 LearnPath

CAICP-E · Python 编程基础

一排小格子

用列表装一组东西,按下标取、往队尾加、再走一遍。

讲解模式

这一节要学会什么

#what

一个变量装一个值,有时不够。一组分数要放一起。 一份购物清单也要放一起。这就用 列表

你会创建列表。会用 [0] 取出第一格。 会 append 加到队尾。会用 len 问有几格。 还会用 for 把每一格走一遍。

插队、按位置拿走、按值删掉,后面先认一认。排序和切片下一课再学。 先把格子建好、加上、走一遍。

教室后面的储物柜

#hook

教室后面有一排柜子。每个柜子有编号。 第一个常常标成 0 号。这和 Python 很像。

一格装一个名字。或者一格装一样要买的东西。

一排小格子

如果觉得有点难 把列表画成一排格子。 在格子上写 0、1、2。 先会建、会取第一格、会往队尾加。

如果已经会了 自己建一份购物清单。 会 append 以后,再认一认 insert、pop、remove。 [-1] 是最后一格。下标超出范围会 IndexError

方括号:把一排放好

#explore-create

列表用方括号。里面的东西用逗号隔开。

python
scores = [90, 85, 92]
names = ["小明", "小红", "小派"]
bag = []

bag = [] 是空列表。里面还没有东西。 购物清单常常从空的开始。

打印整个列表,会把方括号一起显示出来。

python
print(names)

会看到 ['小明', '小红', '小派']

初学建议一列装同类。比如都是分数,或都是名字。 电脑允许混着装。你自己读着会更累。

下标从 0 开始数

#explore-index

取出某一格,要写下标。下标从 0 开始。

python
lockers = ["小明", "小红", "小派"]
print(lockers[0])
print(lockers[1])
print(lockers[2])

会打印小明、小红、小派。lockers[0] 是第一个柜子。 lockers[1] 是第二个柜子。不是第一个。

储物柜编号从零开始

可以改某一个格子:

python
scores = [90, 85, 92]
scores[1] = 88
print(scores)

变成 [90, 88, 92]。第二格从 85 改成了 88。

数下标时,用手指从 0 开始点。点错一格,取出来的就是别人的东西。

append:排到队尾

#explore-append

往末尾加一个,用 append

python
bag = ["铅笔"]
bag.append("橡皮")
bag.append("本子")
print(bag)

得到 ['铅笔', '橡皮', '本子']。新来的站到最后。

小朋友排到队伍最后

空清单也可以先 append。

python
bag = []
bag.append("牛奶")
print(bag)

得到 ['牛奶']

append 最常用。购物、点名、记分数,都常往队尾加。

len 问长度,for 走一遍

#explore-walk

len 问列表有几格。

python
bag = ["铅笔", "橡皮", "本子"]
print(len(bag))

3。空列表的长度是 0

for 可以直接走过列表。每一圈拿出一格。

python
for item in bag:
    print(item)

会一行一样东西。不用自己写 0、1、2。

这就是遍历。检查购物清单时特别合适。

也可以边走边问:

python
scores = [90, 85, 92]
for s in scores:
    if s >= 90:
        print(s)

只打印优秀的分数。if 写在 for 里面,缩进一层。

把储物柜和购物清单串起来,可以是这样:

python
bag = []
bag.append("铅笔")
bag.append("橡皮")
print(bag[0])
print(len(bag))
for item in bag:
    print(item)

先建,再加,再走一遍。这节课的小目标就完整了。

排序、切一段,下一课才做。先不要急着写冒号切片。

另外几招,先认一认

#explore-extra

主路上会建、会取、会加、会走,就够用了。下面几招先认一认。 题目里碰到,知道它在干什么。

也可以从右边数。-1 表示最后一个。

python
lockers = ["小明", "小红", "小派"]
print(lockers[-1])

是小派。

只有 3 个柜子时,不要写 [3]。超出范围会报错。 名字叫 IndexError

想插到指定位置,用 insert。第一个参数是位置。 第二个参数是要放进去的东西。

python
names = ["小明", "小派"]
names.insert(1, "小红")
print(names)

得到 ['小明', '小红', '小派']。原来站在 1 号的人,会往后挪。

有人插进中间,后面往右挪

append 不加位置,永远去队尾。insert 要说清插到哪一格。

按位置拿走,用 pop

python
colors = ["红", "黄", "蓝"]
last = colors.pop()
print(last)
print(colors)

pop() 默认拿走最后一个。这里拿走「蓝」。 列表剩下红、黄。

也可以写下标:colors.pop(0) 拿走 0 号。

按值删除,用 remove。它删掉第一次出现的那个值。

python
nums = [2, 4, 2]
nums.remove(2)
print(nums)

得到 [4, 2]。只删了第一个 2。 后面那个 2 还在。

按位置出列和按名字叫走

pop 问:第几格离开?remove 问:哪个值离开?

先把这几招认下来。用的时候再翻回来看一眼。

这节课我学会了

#review

记住这些:

  1. 列表用 [],下标从 0 开始。
  2. append 加到末尾。
  3. len 问有几格。
  4. for x in 列表 会把每一格走一遍。

试着在心里跑一遍:

python
bag = ["笔"]
bag.append("本")
print(bag[0])
print(len(bag))

第一格是笔。长度是 2。

下一课才排队、切片。也才会改句子。 先把格子认熟。

试一试

#evaluate

看完就来检查一下。选错了也可以再想。

单选题

下标取值

nums = [2, 4, 6] 时,nums[1] 的值是?

单选题

append 之后

a = [1, 2]。执行 a.append(3) 后,a 是?

单选题

len 问几格

bag = [「铅笔」, 「橡皮」, 「本子」]。len(bag) 是?

多选题

关于列表

下列说法正确的有哪些?可以多选。

可多选

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