闲暇之余,学学Python,整理成笔记分享给大家。
注:本文内容来源于《Python编程从入门到实践第3版》一书。
主要内容:
# 遍历整个列表
# 下面使用 for 循环打印一个魔术师名单中的所有名字:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)
print()
# 深入研究循环
"""
例如,在前面的 magicians.py 中使用的简单循环里,Python 将首先读取第一行代码:
for magician in magicians:
这行代码让 Python 获取列表 magicians 中的第一个值 'alice',并将其与变量
magician 相关联。接下来,Python 读取下一行代码:
print(magician)
它让 Python 打印 magician 的值,依然是 'alice'。鉴于该列表还包含其他值,
Python 返回循环的第一行:
for magician in magicians:
Python 获取列表中的下一个名字 'david',并将其与变量 magician 相关联,再执
行下面这行代码:
print(magician)
"""
# 在 for 循环中执行更多的操作
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(f"{magician.title()}, that was a great trick!")
'''
相比于前一个示例,唯一的不同是为每位魔术师都打印一条以其名字为抬头的消息。
第一次通过循环时,变量 magician 的值为 'alice',因此 Python 打印的第一条消
息的抬头为 'Alice';第二次通过循环时,消息的抬头为 'David';第三次通过循
环时,抬头为 'Carolina'。
'''
# 告诉每位魔术师,我们期待他/她的下一次表演:
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 your next trick, {magician.title()}.\n")
print()
# 在 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 your next trick, {magician.title()}.\n")
print("Thank you, everyone. That was a great magic show!")
# 创建数值列表
# 使用 range() 函数
'''
Python 函数 range() 让你能够轻松地生成一系列的数。例如,可以像下面这样使用
range() 函数来打印一系列的数:
'''
# range() 函数让 Python 从指定的第一个值开始数,并在到达指定的第二个值时停止
for value in range(1, 5):
print(value)
print()
# 要打印数 1~5,需要使用 range(1,6):
for value in range(1, 6):
print(value)
# 在使用 range() 时,如果输出不符合预期,请尝试将指定的值加 1 或减 1。
print()
# 使用 range() 创建数值列表
'''
要创建数值列表,可使用 list() 函数将 range() 的结果直接转换为列表。如果将
range() 作为 list() 的参数,输出将是一个数值列表。
'''
numbers = list(range(1,6))
print(numbers)
'''
在使用 range() 函数时,还可指定步长。为此,可以给这个函数指定第三个参数,
Python 将根据这个步长来生成数。
'''
# 下面的代码打印 1~10 的偶数:
even_numbers = list(range(2,11,2))
print(even_numbers)
print()
# 在这个示例中,range() 函数从 2 开始数,然后不断地加 2,直到达到或超过终值(11)。
'''
何创建一个列表,其中包含
前 10 个整数(1~10)的平方
'''
squares = []
for value in range(1,11):
# square = value ** 2
squares.append(value ** 2)
print(squares,end='\n\n')
# 对数值列表执行简单的统计计算
digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
min_digit = min(digits)
print(min_digit)
max_digit = max(digits)
print(max_digit)
sum_digit = sum(digits)
print(sum_digit)
print()
# 列表推导式
'''
列表推导式(list comprehension)将 for 循环和创建新
元素的代码合并成一行,并自动追加新元素
'''
squares = [value ** 2 for value in range(1, 11)]
print(squares,end='\n\n')
"""
要使用这种语法,首先指定一个描述性的列表名,如 squares。然后指定一个左方括
号,并定义一个表达式,用于生成要存储到列表中的值。在这个示例中,表达式为
value**2,它计算平方值。接下来,编写一个 for 循环,用于给表达式提供值,再
加上右方括号。在这个示例中,for 循环为 for value in range(1,11),它将值
1~10 提供给表达式 value**2。请注意,这里的 for 语句末尾没有冒号
"""
# 使用列表的一部分
# 切片
"""
要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与 range() 函数一
样,Python 在到达指定的第二个索引之前的元素时停止。要输出列表中的前三个元
素,需要指定索引 0 和 3,这将返回索引分别为 0、1 和 2 的元素。
"""
# 运动队成员列表
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3])
# 如果要提取列表的第二、第三和第四个元素,可将起始索引指定为 1,并将终止索引指定为 4:
print(players[1:4])
# 如果没有指定第一个索引,Python 将自动从列表开头开始:
print(players[:4])
'''
要让切片终止于列表末尾,也可使用类似的语法。例如,如果要提取从第三个元素到
列表末尾的所有元素,可将起始索引指定为 2,并省略终止索引:
'''
print(players[2:])
# 要输出名单上最后三名队员的名字,可使用切片 players[-3:]:
print(players[-3:])
"""
注意:可在表示切片的方括号内指定第三个值。这个值告诉 Python 在指定范围内
每隔多少元素提取一个。
"""
print()
# 遍历切片
# 如果要遍历列表的部分元素,可在 for 循环中使用切片。下面的示例遍历前三名队员,并打印他们的名字:
print("Here are the first three players on my team:")
for player in players[:3]:
print(player.title())
print()
"""
在很多情况下,切片是很有用的。例如,在编写游戏时,可以在玩家退出游戏时将其
最终得分加入一个列表,然后将该列表按降序排列,再创建一个只包含前三个得分的
切片,以获取该玩家的三个最高得分;在处理数据时,可以使用切片来进行批量处
理;在编写 Web 应用程序时,可以使用切片来分页显示信息,并在每页上显示数量合
适的信息。
"""
# 复制列表
"""
要复制列表,可以创建一个包含整个列表的切片,方法是同时省略起始索引和终止索
引([:])。这让 Python 创建一个起始于第一个元素、终止于最后一个元素的切片,
即复制整个列表。
"""
'''
假设有一个列表包含你最喜欢的四种食品,而你想再创建一个列表,并在其中包含你
的一个朋友喜欢的所有食品。巧的是,你喜欢的食品,这个朋友也都喜欢,因此可通
过复制来创建这个列表:
'''
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_foods.append('cannoli')
friend_foods.append('ice cream')
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)
'''
如果只是将 my_foods
赋给 friend_foods,就不能得到两个列表。例如,下面演示了在不使用切片的情况
下复制列表的情况:
'''
my_foods = ['pizza', 'falafel', 'carrot cake']
# 这是行不通的:
friend_foods = my_foods
my_foods.append('cannoli')
friend_foods.append('ice cream')
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)
print()
"""
这种语法实际上是让 Python 将新变量 friend_foods 关联到已与
my_foods 相关联的列表,因此这两个变量指向同一个列表。有鉴于此,当我们将
'cannoli' 添加到 my_foods 中时,它也将出现在 friend_foods 中。同样,虽然
'ice cream' 好像只被加入了 friend_foods,但它也将同时出现在这两个列表
中。
"""
# 元组
"""
你有时候需要创建一系
列不可修改的元素,元组可满足这种需求。Python 将不能修改的值称为不可变的,而
不可变的列表称为元组(tuple)。
"""
# 定义元组
"""
元组看起来很像列表,但使用圆括号而不是方括号来标识。定义元组后,就可使用索
引来访问其元素,就像访问列表元素一样。
如果有一个大小不应改变的矩形,可将其长度和宽度存储在一个元组中,从而确保它
们是不能修改的:
"""
dimensions = (200, 50)
print(dimensions[0])
print(dimensions[1])
"""
首先定义元组 dimensions,为此使用了圆括号而不是方括号。接下来,分别打印该
元组的各个元素,使用的语法与访问列表元素时使用的语法相同:
"""
# 这里的代码试图修改第一个元素的值,导致 Python 返回类型错误的消息
"""
dimensions[0] = 250
Traceback (most recent call last):
File "G:\Python\Python_program\Python3\第4章\操作列表.py", line 218, in <module>
dimensions[0] = 250
TypeError: 'tuple' object does not support item assignment
"""
"""
注意:严格地说,元组是由逗号标识的,圆括号只是让元组看起来更整洁、更清
晰。如果你要定义只包含一个元素的元组,必须在这个元素后面加上逗号:
"""
my_t = (3,)
# 创建只包含一个元素的元组通常没有意义,但自动生成的元组有可能只有一个元素。
print()
# 遍历元组中的所有值
for dimension in dimensions:
print(dimension)
print()
# 虽然不能修改元组的元素,但可以给表示元组的变量赋值。例如,要修改前述矩形的尺寸,可重新定义整个元组:
dimensions = (200, 50)
print("Original dimensions:")
for dimension in dimensions:
print(dimension)
dimensions = (400, 100)
print("\nModified dimensions:")
for dimension in dimensions:
print(dimension)
print()
# 相比于列表,元组是更简单的数据结构。如果需要存储一组在程序的整个生命周期内都不变的值,就可以使用元组。
练习题:
"""
水饺 想出至少三种你喜欢的水饺,将其名称存储在一个列表中,再使
用 for 循环将每种水饺的名称打印出来。
修改这个 for 循环,使其打印包含水饺名称的句子,而不仅仅是水饺的名
称。对于每种水饺都显示一行输出,如下所示。
我喜欢猪肉茴香水饺.
在程序末尾添加一行代码(不包含在 for 循环中),指出你有多喜欢比萨。
输出应包含针对每种比萨的消息,还有一个总结性的句子,如下所示。
我太喜欢水饺了!
"""
dumplings = ["猪肉白菜", "羊肉大葱", "猪肉荠菜", "猪肉韭菜"]
for dumpling in dumplings:
print("我喜欢%s水饺" %dumpling)
print()
dumplings = ["猪肉白菜", "羊肉大葱", "猪肉荠菜", "猪肉韭菜"]
for dumpling in dumplings:
print("我喜欢%s水饺" %dumpling)
print("我太喜欢水饺了")
print()
"""
动物 想出至少三种有共同特征的动物,将其名称存储在一个列表中,
再使用 for 循环将每种动物的名称打印出来
1、修改这个程序,使其针对每种动物都打印一个句子,如下所示。
A dog would make a great pet.
2、在程序末尾添加一行代码,指出这些动物的共同之处,如打印下面这样的句
子。
Any of these animals would make a great pet!
"""
# 创建包含三种哺乳类宠物的列表
animals = ['dog', 'cat', 'rabbit']
# 任务1:打印动物名称
print("动物列表:")
for animal in animals:
print(animal)
# 任务2:打印带描述的句子
print("\n宠物建议:")
for animal in animals:
print(f"A {animal} would make a greate pet")
# 任务3:添加共同特征说明
print("\n共同特征:")
print("Any of these animals would make a great pet!",end='\n\n')
# 数到 20 使用一个 for 循环打印数 1~20(含)。
for digit in range(1, 21):
print(digit)
# 100 万 创建一个包含数 1~1 000 000 的列表,再使用一个 for 循环将这些数打印出来。
list1 = [digit for digit in range(1, 1000000, 9)]
print(list1)
'''
100 万求和 创建一个包含数 1~1 000 000 的列表,再使用 min() 和
max() 核实该列表确实是从 1 开始、到 1 000 000 结束的。另外,对这个列表调
用函数 sum(),看看 Python 将 100 万个数相加需要多长时间
'''
list2 = list(range(1,1000001))
min_list = min(list2)
max_list = max(list2)
print(min_list,max_list)
sum_list = sum(list2)
print(sum_list,end='\n\n')
"""
奇数 通过给 range() 函数指定第三个参数来创建一个列表,其中包
含 1~20 的奇数;再使用一个 for 循环将这些数打印出来。
"""
seqs = list(range(1,21,2))
for seq in seqs:
print(seq)
print()
"""
3 的倍数 创建一个列表,其中包含 3~30 内能被 3 整除的数,再使用
一个 for 循环将这个列表中的数打印出来。
"""
numbers = list(range(3, 31, 3))
for number in numbers:
print(number)
print()
"""
立方 将同一个数乘三次称为立方。例如,在 Python 中,2 的立方用
2**3 表示。创建一个列表,其中包含前 10 个整数(1~10)的立方,再使用一个
for 循环将这些立方数打印出来。
"""
nums = [num ** 3 for num in range(1,11)]
for num in nums:
print(num)
print()
# 立方推导式 使用列表推导式生成一个列表,其中包含前 10 个整数的立方。
nums = [num ** 3 for num in range(1,11)]
print(nums)
print()
"""
选择你在本章编写的一个程序,在末尾添加几行代码,以完成
如下任务。
打印消息“The first three items in the list are:”,再使用切片来打印列表的前三个
元素。
打印消息“Three items from the middle of the list are:”,再使用切片来打印列表
中间的三个元素。
打印消息“The last three items in the list are:”,再使用切片来打印列表末尾的三
个元素。
"""
nums = list(range(3, 31, 3))
for num in nums:
print(num)
# 新增的切片操作
print("\nThe first three items in the list are:")
print(nums[2:6:2])
print("Three items from the middle of the list are:")
middle_start = len(numbers) // 2 - 1 # 动态计算中间起始位置:通过 len(numbers)//2 -1 计算中间起始索引,确保无论列表长度奇偶都能正确取中间三个元素。
print(numbers[middle_start:middle_start+3])
print("The last three items in the list are:")
print(numbers[-3:])
print()
"""
你的比萨,我的比萨 在你为练习 4.1 编写的程序中,创建比萨列表的
副本,并将其赋给变量 friend_pizzas,再完成如下任务。
在原来的比萨列表中添加一种比萨。
在列表 friend_pizzas 中添加另一种比萨。
核实有两个不同的列表。为此,打印消息“My favorite pizzas are:”,再使用一
个 for 循环来打印第一个列表;打印消息“My friend's favorite pizzas are:”,再
使用一个 for 循环来打印第二个列表。核实新增的比萨被添加到了正确的列
表中。
"""
favorite_pizzas = ['pepperoni', 'hawaiian', 'veggie']
friend_pizzas = favorite_pizzas[:]
favorite_pizzas.append("meat lover's")
friend_pizzas.append("pesto")
print("My favorite pizzas are:")
for pizza in favorite_pizzas:
print(f"- {pizza}")
print("\nMy friend's favorite pizzas are:")
for pizza in friend_pizzas:
print(f"- {pizza}")
"""
自助餐 有一家自助式餐馆,只提供 5 种简单的食品。请想出 5 种简
单的食品,并将其存储在一个元组中。
使用一个 for 循环将该餐馆提供的 5 种食品都打印出来。
尝试修改其中的一个元素,核实 Python 确实会拒绝你这样做。
餐馆调整菜单,替换了两种食品。请编写一行给元组变量赋值的代码,并使
用一个 for 循环将新元组的每个元素都打印出来。
"""
# 创建存储5种食品的元组
menu = ('汉堡', '薯条', '炸鸡', '沙拉', '冰淇淋')
# 打印原始菜单
print("餐馆提供的食品:")
for food in menu:
print(f"- {food}")
# 尝试修改元组元素(会报错)
try:
menu[0] = '披萨' # 这行会触发TypeError
except TypeError as e:
print("\n尝试修改元组时出错:", e)
# 餐馆调整菜单(通过重新赋值整个元组)
menu = ('汉堡', '薯条', '牛排', '水果拼盘', '冰淇淋')
# 打印新菜单
print("\n调整后的菜单:")
for food in menu:
print(f"- {food}")
# 更灵活的修改方式(通过元组拼接)
menu = menu[:1] + ("烤鱼",'牛排', '水果拼盘') + menu[-1:]
print("\n调整后的菜单:")
for food in menu:
print(f"- {food}")
关于列表较详细的文章请看: