学径 LearnPath

CAICP-E · Python 编程基础

排队、切片、改句子

列表排序和切片,字符串分割、替换、格式化。

讲解模式

这一节要学会什么

#what

上一课的 列表 还会两样本事:排队,切一段。 第 4 课的 字符串,这节课也要加工:切开、换字、填空。

你会用 sortsorted。会用切片取出一段分数。 会用 splitreplace、格式化修好一句句子。还会一个字一个字走过去。

这节课有两件小活。先把成绩单理整齐,切一块出来。 再把一句口号改对。

乱成绩和一句错话

#hook

一组成绩乱糟糟。老师要按从低到高排。 有时只要前三名那一段。像切蛋糕,只要中间几块。

黑板上还有一句口号写错了。要把逗号名单切开。 把错字换成对的。再把名字填进句子。

列表管排队和切片。字符串管改句子。 两样都做完,这一课才完整。

排序和切片

如果觉得有点难 切片先记一句:从左边这个开始,到右边那个前面停下。 改句子时,每学一个方法,打印前后对比。

如果已经会了 排好序后取出最高的两个。 再把一句介绍写成 f 字符串:姓名加年龄。 切片有人叫「左闭右开」,意思就是上面那句。 .format 也能填空,和 f 字符串结果一样。

sort 改原来,sorted 另给一份

#explore-sort

从小到大排,用 sort

python
nums = [3, 1, 2]
nums.sort()
print(nums)

变成 [1, 2, 3]sort 会改原来的列表。 原来那一排被重新站过。

从大到小:

python
nums = [3, 1, 2]
nums.sort(reverse=True)
print(nums)

变成 [3, 2, 1]

不想改原来的,用 sorted。它会给出新列表。

python
nums = [3, 1, 2]
new_nums = sorted(nums)
print(nums)
print(new_nums)

nums 还是 [3, 1, 2]new_nums[1, 2, 3]

原队伍被重新排,旁边还有一份复印件

名字也能排。按字典顺序。

python
names = ["安安", "晨晨", "派派"]
print(sorted(names))

会按第一个字的顺序站好。得到 ['安安', '晨晨', '派派']

口诀可以记: sort 动手改。sorted 另给一份。

切片:像切一块蛋糕

#explore-slice

切片用冒号。写法是 列表[开始:结束]。 从左边这个开始,到右边那个前面停下。

python
letters = ["a", "b", "c", "d", "e"]
print(letters[1:4])

得到 ['b', 'c', 'd']。从下标 1 取到下标 3。 下标 4 那块不上盘。

蛋糕切到 4 但 4 没上盘

省略开始,表示从最左边。

python
print(letters[:3])

['a', 'b', 'c']。前三个。

省略结束,表示一直到最右边。

python
print(letters[2:])

['c', 'd', 'e']

成绩单可以先排,再切:

python
scores = [70, 95, 88, 82]
high = sorted(scores, reverse=True)
print(high[:2])

先从高到低。再切出最高的两个。 得到 [95, 88]

切片常常得到新列表。原来的列表还在。

单个下标取出一个。切片取出一排。 两个不要混。

python
print(letters[1])
print(letters[1:2])

一个是 'b'。一个是 ['b']。 样子不同。

隔一个取一个

#explore-skip

步长也可以写。第三个数表示每次跳几格。

python
letters = ["a", "b", "c", "d", "e"]
print(letters[::2])

隔一个取一个。得到 ['a', 'c', 'e']

队伍里隔一个取一个

从下标 1 开始,隔一个取:

python
print(letters[1::2])

得到 ['b', 'd']

点名时隔一个喊一个,就是这个意思。会认就行。 切蛋糕那一句更常用。

走完整张成绩单,还是用 for

python
for s in scores:
    print(s)

老师从头读到尾的成绩单

先读一遍,再排序,再切一段。三步可以连着做。

split:沿逗号剪开

#explore-split

名单有时写在一句里。中间用逗号隔开。 split 会按分隔符切开。结果是列表。

python
text = "苹果,香蕉,梨"
parts = text.split(",")
print(parts)

得到 ['苹果', '香蕉', '梨']

水果清单沿逗号剪成三张卡

不写分隔符时,按空白切。

python
print("a b c".split())

得到 ['a', 'b', 'c']

切完就变成列表。可以按下标取,也可以 for 走一遍。

还记得 + 能把两段文字接起来。那是粘。 split 是剪。一来一回。

replace:换字,旧句子还在

#explore-replace

replace 会把旧字换成新字。

python
line = "我喜欢猫"
print(line.replace("猫", "狗"))
print(line)

第一行打印:我喜欢狗 第二行还是:我喜欢猫

因为 replace 常常得到新字符串。旧的 line 没被改掉。

猫改成狗,原句还摊在桌上

想留下新的,要赋值。

python
line = line.replace("猫", "狗")
print(line)

这回才是:我喜欢狗。

口号写错一个字,就这样改。改完记得接住新句子。

把名字填进句子,再逐字走

#explore-format

把变量填进句子,叫格式化。一种清楚的写法是 f 字符串。 字母 f 写在引号前面。

python
name = "小红"
age = 11
print(f"{name}今年{age}岁")

得到:小红今年11岁 大括号里放变量名。

填空卡里掉进小派和十一

用 f 字符串就够了。

字符串可以当一排字符来走。

python
for ch in "Python":
    print(ch)

会一字母一行。空格、标点也是字符。

还可以用下标。和列表很像,从 0 开始。

python
word = "hello"
print(word[0])
print(word[1:4])

hell

把改句子串起来,可以是这样:

python
raw = "苹果,香蕉,梨"
fruits = raw.split(",")
msg = "我喜欢猫"
msg = msg.replace("猫", fruits[0])
print(f"{msg}。今天买了{len(fruits)}样。")

先切开,再换字,再填空。一句口号就修好了。

字符串加工

这节课我学会了

#review

记住这些:

  1. sort 会改原来的列表,sorted 会得到新列表。
  2. 切片从左边这个开始,到右边那个前面停下。[:n] 前 n 个,[n:] 从 n 到末尾。
  3. split 切成列表。
  4. replace 换字,想留下就要赋值。
  5. f 字符串可以把变量填进句子。
  6. for ch in s 遍历每个字符。

成绩单:先读,再排,再切。口号:先剪,再换,再填。

下一课才把做法装成工具。也才会用现成的帮手做统计。

试一试

#evaluate

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

单选题

切片结果

a = [0, 1, 2, 3, 4]。a[1:3] 是?

单选题

sort 会怎样

nums = [2, 1]。执行 nums.sort() 后,nums 是?

单选题

替换后原来呢

s = 「猫」。执行 s.replace(「猫」, 「狗」) 但没有赋值。s 通常是?

多选题

排队和改句子

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

可多选

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