第4章 操作列表
程序员文章站
2022-05-07 12:09:24
...
知识:
# 第4章 操作列表
# 4.1 遍历整个列表
# 需要对列表中的每一个元素都执行相同的操作时,可使用Python中的for循环。
'''
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)
'''
# 4.1.1 深入地研究循环
# 无
# 4.1.2 在for循环中执行更多的操作
'''
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")
print("I can't wait to see your next trick, " + magician.title() + ".\n")
'''
# 4.1.3 在for循环结束后执行一些操作。
'''
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")
print("I can't wait to see your next trick, " + magician.title() + ".\n")
print("Thank you, everyone. That was a great magic show!")
'''
# 4.2 避免缩进错误
# 4.2.1 忘记缩进
# 对于位于for 语句后面且属于循环组成部分的代码行,一定要缩进。如果你忘记缩进,Python会提醒你:
'''
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")
'''
# 4.2.2 忘记缩进额外的代码行 忘记缩进额外的代码行
# 有时候,循环能够运行而不会报告错误,但结果可能会出乎意料。试图在循环中执行多项任务,却忘记缩进其中的一些代码行时,就会出现这种情况
# 这是一个逻辑错误 逻辑错误 。从语法上看,这些Python代码是合法的,但由于存在逻辑错误,结果并不符合预期。如果你预期某项操作将针对每个列表元素都执行一次,但它却只执行了 一次,请确定是否需要将一行或多行代码缩进
# 4.2.3 不必要的缩进
# 为避免意外缩进错误,请只缩进需要缩进的代码。在前面编写的程序中,只有要在for 循环中对每个元素执行的代码需要缩进。
# 4.2.4 循环后不必要的缩进
# 循环后不必要的缩进 如果你不小心缩进了应在循环结束后执行的代码,这些代码将针对每个列表元素重复执行。在有些情况下,这可能导致Python报告语法错误,但在大多数情况下,这只会导致逻辑 错误。
# 4.3 创建数值列表
# 列表非常适合用于存储数字集合,而Python提供了很多工具,可帮助你高效地处理数字列表。明白
# 如何有效的使用这些工具后,即便列表包含数百个元素,你编写的代码也能运行得很好。
# 4.3.1 使用函数range()
# Python 函数range() 让你能够轻松地生成一系列的数字。
'''
for value in range(1, 5):
print(value)
'''
# range() 让Python 从你指定的第一个值开始数,并在到达你指定的第二个值后停止,因此输出不包含第二个值。
'''
for value in range(1, 6):
print(value)
'''
# 使用range()时,如果输出不符合预期,如果请尝试将指定的值加1或减1。
# 4.3.2 使用range() 创建数字列表
# 要创建数字列表,可使用函数list()将range() 的结果直接转换为列表。如果将range()作为list()的参数,输出将为一个数字列表。
'''
numbers = list(range(1, 6))
print(numbers)
'''
# 使用函数range()时,还可指定步长。
'''
even_numbers = list(range(2, 11, 2))
print(even_numbers)
'''
# 使用函数range()几乎能够创建任何需要的数字集,
'''
squares = []
for value in range(1,11):
square = value**2
squares.append(square)
print(squares)
'''
# 创建更复杂的列表时,可使用上述两种方法中的任何一种。有时候,使用临时变量会让代码更易读;而在其他情况下,这样做只会让代码无谓地变长。你首先应该考虑的是,编 写清晰易懂且能完成所需功能的代码;等到审核代码时,再考虑采用更高效的方法
# 4.3.3 对数字列表执行简单的统计计算。
# 有几个专门用于处理数字列表的Python 函数。例如,你可以轻松地找出数字的最大值】最小值和总和。
'''
digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(min(digits))
print(max(digits))
print(sum(digits))
'''
# 4.3.4 列表解析
'''
squares = [value**2 for value in range(1,11)]
print(squares)
'''
# 4.4 使用列表的一部分。
# 在第三章学习中,学习如何访问单个数列元素。
'''
# 在第3章中,你学习了如何访问单个列表元素。在本章中,你一直在学习如何处理列表的所有元素。你还可以处理列表的部分元素——Python称之为切片 切片
4.4.1 切片 切片 要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数range() 一样,Python在到达你指定的第二个索引前面的元素后停止。要输出列表中的前三个元素,需 要指定索引0~3,这将输出分别为0 、1 和2 的元素。
'''
'''
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3])
# 如果你要提取列表的第2-4个元素,可将起始索引指定为1,并将终止索引指定为4:
print(players[1:4])
# 如果你没有指定第一个索引,Python 将自动从列表开头开始:
print(players[:4])
# 要让切片终止于列表末尾,也可使用类似的语法。例如,如果要提取从第3个元素到列表末尾的所有元素,可将起始索引指定为2,并省略终止索引。
print(players[2:])
# 无论列表多长,这种语法都能够让你输出从特定位置到列表末尾的所有元素。本书前面说过,负数索引返回离列表末尾相应距离的元素,因此你可以输出列表末尾的任何切片。
# 如果你要输出名单上的最后三名队员,可使用切片players[-3:]
print(players[-3:])
'''
# 4.4.2 遍历切片
# 如果要遍历列表的部分元素,可在for循环中使用切片。在下面的示例中,我们遍历前三名队员,并打印他们的名字。
'''
print("Here are the first three players on my team:")
for player in players[:3]:
print(player.title())
'''
# 在很多情况下,切片都很有用。例如:编写游戏时,你可以在玩家退出游戏时,将其最终得分加入到一个列表中。
# 然后,为获取玩家的三个最高得分,你可以将该列表按降序排列,再创建一个只包含前三个得分发切片。
# 处理数据时,可使用切片来进行批量处理;编写Web应用程序时,可使用切片来分页显示信息,并在每页显示数量合适的信息。
# 4.4.3 复制列表
'''
你经常需要根据既有列表创建全新的列表。下面来介绍复制列表的工作原理,以及复制列表可提供极大帮助的一种情形。
要复制列表,可创建一个包含整个列表的切片,方法时同时省略起始索引和终止索引([:])。这让Python
创建一个起始于第一个元素,终止于最后一个元素的切片,即复制整个列表。
'''
'''
# food.py
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]
print("My favorite foods are:")
for i in my_foods:
print(i)
print("My friend's favorite foods are:")
print(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)
# 4.5 元组
# 列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏中的角色列表至关重要。
# 然而,有时候你需要创建一系列不可修改的元素,元组可以满足这种需求。Python将不能修改的值称为不可变的,而不可变的列表被称为元组。
# 4.5.1 定义元组。
# 元组看起来犹如列表,但使用圆括号而不是方括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。
# 例如,如果有一个大小不应改变的矩形,可将其长度和宽度存储在一个元组中,从而确保它们是不能修改的。
'''
dimensions = (200, 50)
print(dimensions[0])
print(dimensions[1])
'''
# 4.5.2 遍历元组中的所有值。
'''
dimensions = (200, 50)
for dimension in dimensions:
print(dimension)
'''
# 4.5.3 修改元组变量
# 虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,如果要修改前述矩形的尺寸,可重新定义整个元组:
'''
dimensions = (200, 50)
print("Original dimension:")
for dimension in dimensions:
print(dimension)
dimensions = (400, 100)
print("\nModified dimensions:")
for dimension in dimensions:
print(dimension)
'''
# 4.6 设置代码格式
# 4.6.1 格式设置指南
# 4.6.2 缩进
# PEP8建议每级缩进都使用四个空格,这既可以提高可读性,又留下了足够的多级缩进空间。
# 4.6.3 行长
# 很多Python 程序员都建议每行不超过80字符。
# PEP 8还建议注释的行长都不超过72字符,因为有些工具为大型项目自动生成文档时,会在每行注释开头添加格式化字符
# 4.6.4 空行 空行 要将程序的不同部分分开,可使用空行。你应该使用空行来组织程序文件,
# 但也不能滥用;只要按本书的示例展示的那样做,就能掌握其中的平衡。
# 例如,如果你有5行创建列表 的代码,还有3行处理该列表的代码,那么用一个空行将这两部分隔开是合适的。
# 然而,你不应使用三四个空行将它们隔开。 空行不会影响代码的运行,但会影响代码的可读性。
# Python解释器根据水平缩进情况来解读代码,但不关心垂直间距。
# 4.6.5 其他格式设置指南 其他格式设置指南 PEP 8还有很多其他的格式设置建议,
# 但这些指南针对的程序大都比目前为止本书提到的程序复杂。等介绍更复杂的Python结构时,
# 我们再来分享相关的PEP 8指南。
作业:
'''
4-1 比萨 比萨 :想出至少三种你喜欢的比萨,将其名称存储在一个列表中,再使用for 循环将每种比萨的名称都打印出来。
修改这个for 循环,使其打印包含比萨名称的句子,而不仅仅是比萨的名称。对于每种比萨,都显示一行输出,如“I like pepperoni pizza”。
在程序末尾添加一行代码,它不在for 循环中,指出你有多喜欢比萨。输出应包含针对每种比萨的消息,还有一个总结性句子,如“I really love pizza!”。
'''
'''
pizzas = ['Margherita', 'focaccia', 'Marinara', 'Romana']
for i in pizzas:
print(i)
print("I really love %s "%i + 'pizza')
print("I really love pizza")
'''
# 动手试一试
# 4-3 数到20:使用一个for循环打印数字1-20 (含)
'''
for i in range(1, 21):
print(i)
'''
# 4-4 一百万 一百万 :创建一个列表,其中包含数字1~1 000 000,再使用一个for 循环将这些数字打印出来(如果输出的时间太长,按Ctrl + C停止输出,或关闭输出窗口)
'''
for m in range(1, 1000000):
print(m)
'''
# 4-5 计算 计算1~1 000 000的总和 的总和 :创建一个列表,其中包含数字1~1 000 000,再使用min() 和max() 核实该列表确实是从1开始,到1 000 000结束的。另外,对这个列表 调用函数sum() ,看看Python将一百万个数字相加需要多长时间。
'''
list_m = list(range(1, 1000001))
print(list_m)
print(sum(list_m))
print(min(list_m))
print(max(list_m))
'''
# 4-6 奇数 奇数 :通过给函数range() 指定第三个参数来创建一个列表,其中包含1~20的奇数;再使用一个for 循环将这些数字都打印出来。
'''
for i in range(1, 21, 2):
print(i)
'''
# 4-7 3的倍数:创建一个列表,其中包含3-30内能被3整除的数字,再使用一个for循环将这个列表中的数字都打印出来。
'''
list(3*values for values in range(3,30,))
print(list)
'''
# 4-8 立方 立方 :将同一个数字乘三次称为立方。例如,在Python中,2的立方用2**3 表示。请创建一个列表,其中包含前10个整数(即1~10)的立方,再使用一个for 循 环将这些立方数都打印出来。
'''
list_m = (values ** 3 for values in range(1, 10, 2))
print(list_m)
'''
'''
4-10 切片 切片 :选择你在本章编写的一个程序,在末尾添加几行代码,以完成如下任务。
打印消息“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:”,再使用切片来打印列表末尾的三个元素
'''
'''
pizzas = ['Margherita', 'focaccia', 'Marinara', 'Romana','spp', 'mamfd', 'ddef', 'dfhfcg', 'rtyufg']
print("The first three items in the list are:")
print(pizzas[:3])
print("Three items from the middle of the list are:")
print(pizzas[3:6])
print("The last three items in the list are:")
print(pizzas[-3:])
'''
'''
4-11 你的比萨和我的比萨 你的比萨和我的比萨 :在你为完成练习4-1而编写的程序中,
创建比萨列表的副本,并将其存储到变量friend_pizzas 中,再完成如下任务。
在原来的比萨列表中添加一种比萨。
在列表 friend_pizzas 中添加另一种比萨。
核实你有两个不同的列表。为此,打印消息“My favorite pizzas are:”,
再使用一个for 循环来打印第一个列表;打印消息“My friend's favorite pizzas are:”,
再使用一 个for 循环来打印第二个列表。核实新增的比萨被添加到了正确的列表中。
'''
'''
my_pizzas = ['Margherita', 'focaccia', 'Marinara', 'Romana', 'spp', 'mamfd', 'ddef', 'dfhfcg', 'rtyufg']
friend_pizzas = my_pizzas[:]
print("My favorite pizzas are:")
for i in my_pizzas:
print(i)
print(my_pizzas)
print("My friend's favorite pizzas are:")
for m in friend_pizzas:
print(m)
print(friend_pizzas)
'''
# 4-12 使用多个循环 使用多个循环 :在本节中,为节省篇幅,程序foods.py的每个版本都没有使用for 循环来打印列表。
# 请选择一个版本的foods.py,在其中编写两个for 循环,将各 个食品列表都打印出来
'''
my_pizzas = ['Margherita', 'focaccia', 'Marinara', 'Romana', 'spp', 'mamfd', 'ddef', 'dfhfcg', 'rtyufg']
friend_pizzas = my_pizzas[:]
print("My favorite pizzas are:")
for i in my_pizzas:
print(i)
print(my_pizzas)
print("My friend's favorite pizzas are:")
for m in friend_pizzas:
print(m)
print(friend_pizzas)
'''
'''
动手试一试
4-13 自助餐 自助餐 :有一家自助式餐馆,只提供五种简单的食品。请想出五种简单的食品,并将其存储在一个元组中。
使用一个for 循环将该餐馆提供的五种食品都打印出来。
尝试修改其中的一个元素,核实Python确实会拒绝你这样做。
餐馆调整了菜单,替换了它提供的其中两种食品。请编写一个这样的代码块:给元组变量赋值,并使用一个for 循环将新元组的每个元素都打印出来。
foods = ('chicken', 'duck', 'pork', 'beef', 'fish')
for food in foods:
print(food)
# foods[1] = 'dog'
foods = ('chicken', 'duck', 'pork', 'beef', 'fish')
foods = ('chicken', 'dog', 'pork', 'horse', 'fish')
for food in foods:
print(food)
'''