0% found this document useful (0 votes)
45 views39 pages

Python 4

Uploaded by

2919856755
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
45 views39 pages

Python 4

Uploaded by

2919856755
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 39

Python 编程:从入门到实践

(第三版)

Teacher Name / Email


关于本讲义
• 与《 Python 编程:从入门到实践(第三版)》一书配套使用
• 讲义中的文本及绘图采用署名-非商业性使用-
相同方式共享协议(CC BY-NC-SA 4.0)进行许可
• 引用的网络图片附有超链接,可用于访问来源
• 讨论、意见、答疑、勘误、更新:
https://github.com/scruel/pcc_3e_slides

作者: @Scruel Tao


第 4 章 操作列表
• 4.1 遍历整个列表
• 4.2 避免缩进错误
• 4.3 创建数值列表
• 4.4 使用列表的一部分
• 4.5 元组
• 4.6 设置代码格式
• 4.7 小结
4.1 遍历整个列表
我们经常需要遍历列表的所有元素,对每个元素执行相同的操作
for 循环:对列表中的每个元素都执行相同的操作
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)
在第二行中,我们使用了 for 关键字定义了一个循环体
4.1 遍历整个列表
我们经常需要遍历列表的所有元素,对每个元素执行相同的操作
for 循环:对列表中的每个元素都执行相同的操作
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)
在第二行中,我们使用了 for 关键字定义了一个循环体
它能让 Python 从列表 magicians 中依次取出一个个名字,
并将取出的名字与变量 magician 相关联
4.1 遍历整个列表
我们经常需要遍历列表的所有元素,对每个元素执行相同的操作
for 循环:对列表中的每个元素都执行相同的操作
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)
在第二行中,我们使用了 for 关键字来定义了一个循环
它能让 Python 从列表 magicians 中依次取出一个个名字,
并将取出的名字与变量 magician 相关联
在第三行中,我们打出了四个空格作为缩进( indentation )
4.1 遍历整个列表
我们经常需要遍历列表的所有元素,对每个元素执行相同的操作
for 循环:对列表中的每个元素都执行相同的操作 运行结果
magicians = ['alice', 'david', 'carolina'] alice
for magician in magicians: david
print(magician) carolina

在第二行中,我们使用了 for 关键字来定义了一个循环


它能让 Python 从列表 magicians 中依次取出一个个名字,
并将取出的名字与变量 magician 相关联
在第三行中,我们打出了四个空格作为缩进( indentation )
最后,让 Python 打印前面赋给变量 magician 的名字
4.1.1 深入研究循环
仔细看看这段循环代码, for magician in magicians:
magician 是一个临时变量 print(magician)
4.1.1 深入研究循环
仔细看看这段循环代码,
magician 是一个临时变量
4.1.1 深入研究循环
仔细看看这段循环代码,
magician 是一个临时变量
4.1.1 深入研究循环
仔细看看这段循环代码,
magician 是一个临时变量
4.1.1 深入研究循环
仔细看看这段循环代码, for magician in magicians:
magician 是一个临时变量 print(magician)

临时变量的名称可以任意指定:

for a in cats: for cat in cats:


for b in dogs: for dog in dogs:
for c in list_of_items: for item in list_of_items:

含义不清晰? 名称的含义清晰了很多
4.1.2 在 for 循环中执行更多的操作
在 for 循环中,可以对每个元素执行任意操作
只要保持缩进,我们可以在 for 循环中放入多行语句

随着书本,我们来看一看些许复杂的例子:

magicians = ['alice', 'david', 'carolina']


for magician in magicians:
print(f"{magician.title()}, that was a great trick!")
print(f"I can't wait to see more, {magician.title()}.\
n")
4.1.2 在 for 循环中执行更多的操作
在 for 循环中,可以对每个元素执行任意操作
只要保持缩进,我们可以在 for 循环中放入多行语句
运行结果
Alice, that was a great trick!
I can't wait to see more, Alice.

David, that was a great trick!


I can't wait to see more, David.

Carolina, that was a great trick!


I can't wait to see more, Carolina.
4.1.3 在 for 循环结束后执行一些操作
我们可以在 for 循环结束后,提供一个总结性输出,或接着执行
程序必须完成的其他任务

例如我们可以打印一条向全体魔术师致谢的消息,以感谢他们的精
彩表演:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(f"{magician.title()}, that was a great trick!")
print(f"I can't wait to see more, {magician.title()}.\n")
print("Thank you, everyone. That was a great magic show!")
4.1.3 在 for 循环结束后执行一些操作
运行结果
Alice, that was a great trick!
I can't wait to see more, Alice.

David, that was a great trick!


I can't wait to see more, David.

Carolina, that was a great trick!


I can't wait to see more, Carolina.

Thank you, everyone. That was a great magic show!


4.2 避免缩进错误
• 没有正确的缩进

magicians = ['alice', 'david']


for magician in magicians:
print(magician)

缩进错误
( IndentationError )
4.2 避免缩进错误
• 没有正确的缩进(缩进错误)
• 忘记缩进额外的代码行
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(f"{magician.title()}, that was a great trick!")
print(f"I can't wait to see more, {magician.title()}.\n")

逻辑错误
4.2 避免缩进错误
• 没有正确的缩进(缩进错误)
• 忘记缩进额外的代码行(逻辑错误)
• 循环后不必要的缩进

magicians = ['alice', 'david', 'carolina']


for magician in magicians:
print(f"{magician.title()}, ...!")
print(f"I can't wait to see more, {magician.title()}.\n")
print("Thank you everyone, that was a great magic show!")

逻辑错误
4.2 避免缩进错误
• 没有正确的缩进(缩进错误)
• 忘记缩进额外的代码行(逻辑错误)
• 循环后不必要的缩进(逻辑错误)
• 循环的末尾漏掉了冒号
magicians = ['alice', 'david', 'carolina']
for magician in magicians
print(magician)

语法错误
( SyntaxError )
4.2 避免缩进错误
• 没有正确的缩进(缩进错误)
• 忘记缩进额外的代码行(逻辑错误)
• 循环后不必要的缩进(逻辑错误)
• 循环的末尾漏掉了冒号(语法错误)
4.3 创建数值列表
• range([start,] end [,step]) :生成可迭代的数值列表的表示。
运行结果
for value in range(1, 5): 1
print(value) 2
3
• 代码只打印了数 1 ~ 4 , 4

这是编程语言中常见的差一行为,输出在指定的第二个值处停止了。
• 要打印数 1 ~ 5 ,需要使用 range(1, 6)
• 第一个参数 start 是可选的:
例如 range(6) 将会打印数 0 ~ 5
4.3 创建数值列表
• range([start,] end [,step]) :生成可迭代的数值列表的表示。

我们可以创建一个空列表, squares = []
for value in range(1, 11):
然后将计算后的数添加到其中。 squares.append(value ** 2)

print(squares)

为了代码的清晰简单, 运行结果
中间结果未用临时变量存储 [1, 4, 9, 16, 25, 36, 49, 64, 81,
100]
4.3 列表推导式( list comprehension )
类似于之前使用循环添加元素的代码,
我们还可以利用列表推导式直接生成列表:
squares = [value**2 for value in range(1, 11)]
print(squares)

运行的结果是相同的: 暂时不理解没关系,
运行结果 不妨多多对比练习
[1, 4, 9, 16, 25, 36, 49, 64, 81,
100]
4.3 数值列表的简单统计计算
• max(lst) :取数值列表中的最大值。
• min(lst) :取数值列表中的最小值。
• sum(lst) :对数值列表执行求和计算。

digits = [1, 2, 3, 4, 5] 运行结果


print(min(digits)) 1
print(max(digits)) 5
print(sum(digits)) 15

试试创建更多元素再执行统计
4.4 使用列表的一部分
切片( slice ):处理列表中部分元素的语法
我们可以通过在索引中添加冒号( : )来获取部分列表:
players = ['charles', 'martina', 'michael', 'florence']
print(players[0:3])

这表示我们指定获取前三个元素:
运行结果
['charles', 'martina', 'michael']
4.4 使用列表的一部分
切片( slice ):处理列表中部分元素的语法
我们可以通过在索引中添加冒号( : )来获取部分列表:
players = ['charles', 'martina', 'michael', 'florence']
print(players[1:3])

这表示我们指定获取第二和第三个元素:
运行结果
['martina', 'michael']
4.4 使用列表的一部分
切片( slice ):处理列表中部分元素的语法
我们可以通过在索引中添加冒号( : )来获取部分列表,
如果没有指定起始索引, Python 将自动从列表开头开始:
players = ['charles', 'martina', 'michael', 'florence']
print(players[:3])

运行结果
['charles', 'martina', 'michael']
4.4 使用列表的一部分
切片( slice ):处理列表中部分元素的语法
我们可以通过在索引中添加冒号( : )来获取部分列表,
类似的,我们也可以省略终止索引:
players = ['charles', 'martina', 'michael', 'florence']
print(players[2:])

运行结果
['michael', 'florence']
4.4 使用列表的一部分
切片( slice ):处理列表中部分元素的语法
我们可以通过在索引中添加冒号( : )来获取部分列表,
我们也可以使用负数索引来进行切片操作:
players = ['charles', 'martina', 'michael', 'florence']
print(players[-2:])

运行结果
['michael', 'florence']
4.4 遍历切片
如果要遍历列表的部分元素,可在 for 循环中使用切片:
players = ['charles', 'martina', 'michael', 'florence']
print("Here are the first three players on my team:")
for player in players[:3]:
print(player.title())

运行结果
Here are the first three players on my team:
Charles
Martina
Michael
4.4 拷贝列表
切片操作总是返回列表的拷贝:
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)
运行结果
My favorite foods are:
['pizza', 'falafel', 'carrot cake']

My friend's favorite foods are:


['pizza', 'falafel', 'carrot cake']
4.4 拷贝列表
切片操作总是返回列表的拷贝,所以可以根据原列表创建新列表:
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]
my_foods.append('cannoli')
friend_foods.append('ice cream')
...

运行结果
My favorite foods are:
['pizza', 'falafel', 'carrot cake', 'cannoli']

My friend's favorite foods are:


['pizza', 'falafel', 'carrot cake', 'ice cream']
4.4 拷贝列表
不使用切片,实际上不能起到拷贝后相互独立的效果:
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods # 未使用切片,直接赋值
my_foods.append('cannoli')
friend_foods.append('ice cream')
...

运行结果
My favorite foods are:
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']

My friend's favorite foods are:


['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']
4.5 元组( tuple )
元组:不可变的列表,使用圆括号而不是方括号来标识。

dimensions = (200, 50) 运行结果


print(dimensions[0]) 200
print(dimensions[1]) 50

• 也可以通过使用 for 循环来遍历元组中的元素


• 无法通过 dimensions[0] = 250 修改元组中的元素,
试图这样做的话,你将会得到类型错误( TypeError )
4.6 设置代码格式
一些编码的建议:
• 建议使用 4 个空格作为每级的缩进
• 不要混用制表符( Tab 键)和空格——以避免小组程序员之战
4.6 编码建议
一些编码的建议(最终应遵循小组中的大多数):
• 建议使用 4 个空格作为每级的缩进
• 不要混用制表符( Tab 键)和空格
• 常用编辑器支持设置在按下 Tab 键后输入多个空格的自动转换
• 建议每行不超过 79 个字符
• 建议将程序不同的部分用空行隔开,但不要插入冗余的空行

• 更多的格式指南会继续谈到,但可以提前读一读 PEP8
4.7 小结
学习了:
• 如何高效地处理列表中的元素,并使用 for 循环遍历列表。
• 根据缩进来确定程序的结构,避免一些常见的缩进错误。
• 如何创建和操作简单的数值列表。
• 通过切片来使用列表的一部分,以及复制列表。
• 元组的相关知识,以及如何使得代码易于阅读。

在下一章中,我们将学习 if 语句,并会结合列表让程序根据特
定条件,判断采取相应的措施。
课后拓展
• 练习使用列表推导式
• 回忆字符串的定义,并尝试对它执行 for 循环和切片操作

可选拓展
• 大概了解一下了解 PEP 及 PEP8 是什么
• 查询并总结列表相关的常用方法和函数,与元组进行区分
• 了解如何自动完成代码的格式化,并了解什么是 EditConfig ,
并尝试配置和使用它
• 了解什么是浅拷贝、深拷贝,如何在 Python 中实现深拷贝

You might also like