遍历列表
你经常遍历列表的所有元素,对每个元素执行相同的操作。例如,在游戏中,可能需要将每个界面元素平移相同的距离;对于包含数字列表,可能需要对每个元素执行相同的统计运算;在网站中,可能需要显示文章列表中的每个标题。需要对列表中的每个元素都执行相同的操作时可以用Python中的for循环。
magician.py
>>>magicians=['alice','david','carolina']
>>>for magician in magicians:
print(magician)
alice
david
carolina
首先定义了一个列表,接下来定义了一个for循环,让Python从列表magicians取出一个名字,并将其存储在变量magician中,最后让Python打印存储在变量中的名字。
避免缩进错误
Python根据缩进来判断前一行与后一行的关系。
>>>magicians=['alice','david','carolina']
>>>for magician in magicians:
print(magician.title()+",that was a great trick!")
print("Thank you everyone, that was a great magic show!")
Alice,that was a great trick!
David,that was a great trick!
Carolina,that was a great trick!
Thank you everyone, that was a great magic show!
第一条print语句针对列表中的每位魔术师重复执行。然而由于第二条print语句没有缩进,因此只执行了一次。
创建数值列表
在游戏中,需要跟踪每个角色的位置,还可能需要跟踪玩家的几个最高得分。在数据可视化中,处理的几乎都是由数字(如温度、距离、人口数量、经度和维度等)组成的集合。
列表非常适合于存储数字,而Python提供了很多工具,可帮助你高效地处理数字列表。
使用函数range()
Python函数range()让你能够轻松地生成一系列数字。
number.py
>>> for value in range(1,5):
print(value)
1
2
3
4
函数range()让python从你指定的第一个值开始数,并在到达你指定的第二个值后停止,因此输出不包含第二个值(这里为5)。
使用range时,如果输出的值不符合预期,尝试将指定的值加1或减1。
使用range()创建数字列表
要创建数字列表,可使用函数list()将range的结果转换为列表。将range作为list的参数,输出将为一个数字列表。
>>> numbers=list(range(1,6))
>>> print(numbers)
[1, 2, 3, 4, 5]
使用函数range()时,还可以指定步长。例如,打印1~10内的偶数:
even_numbers.py
>>> even_numbers=list(range(2,11,2))
>>> print(even_numbers)
[2, 4, 6, 8, 10]
使用range()几乎能创建任何需要的数字集,例如,如何创建一个列表,其中包含前10个整数(即1~10)的平方呢?
在Python中,两个星号(**)表示乘方运算。
squares.py
>>>squares=[]
>>>for value in range(1,11)
square=value**2
squares.append(square)
>>>print(squares)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
首先我们创建了一个空列表;接下来,使用函数range()让Python遍历1~10的值。在循环中,计算当前的平方,并将结果存储到变量square中。然后将新计算得到的平方值附加到列表squares末尾。最后print未用缩进,单独起行打印结果。
对数字列表进行简单的统计计算
>>> digitals=[2,5,6,4,8,10,13,1,7]
>>> min(digitals)
1
>>> max(digitals)
13
>>> sum(digitals)
56
这里用min( ),max( ),sum( )分别统计了列表digitals里的最小值,最大值和总和。
列表解析
前面介绍的生成列表squares的方式包含三四行代码,而列表解析让你只需要一行代码就能生成这样的列表。
下面使用列表解析创建你在前面看到的平方数列表:
squares.py
>>> squares=[value**2 for value in range(1,11)]
>>> print(squares)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
这种语法,首先指定一个描述性的列表名,如squares。然后,指定一个左方括号,并定义一个表达式,用于生成ni要存储到列表的值。在这个示例中,表达式为value**2,它计算平方值。接下来,编写一个for循环给表达式供值,再加上右方括号。这里的for语句末尾没有冒号。
使用列表的一部分
前面,我们学习了如何访问单个列表元素。本章中,我们一直在学习如何处理列表中的所有元素。我们还可以学习如何处理列表的部分元素——Python称之为切片。
要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数range( )一样,Python在到达你指定的第二个索引前面的元素后停止。
Players.py
打印前三名在列表players里的队员:
>>> players=['charles','martina','michael','florence','eli']
>>> print(players[0:3])
['charles', 'martina', 'michael']
如果你要提取列表第2~4个元素,可将起始索引指定为1,终止索引指定为4:
>>> players=['charles','martina','michael','florence','eli']
>>> print(players[1:4])
['martina', 'michael', 'florence']
如果你没有指定第一个索引,Python将自动从列表开头开始:
>>> players=['charles','martina','michael','florence','eli']
>>> print(players[:4])
['charles', 'martina', 'michael', 'florence']
如果你没有指定第二个索引,Python将从第一个索引开始直到列表的末尾结束:
>>> players=['charles','martina','michael','florence','eli']
>>> print(players[0:])
['charles', 'martina', 'michael', 'florence', 'eli']
遍历切片
如果要遍历列表的部分元素,可在for循环中使用切片。
players=['charles','martina','michael','florence','eli']
print("Here is the first three members on my team:")
for player in players[:3]:
print(player.title())
Here is the first three members on my team:
Charles
Martina
Michael
在很多情况相爱切片都很有用。例如,编写游戏时,你可以在玩家退出游戏时将其最终得分加入到一个列表中。然后,为获取该玩家的三个最高分,你可以将列表按降序排列,再创建一个只包含前三个得分的切片。处理数据时,可以用切片来进行批量处理;编写Web应用程序时,可以使用切片来分页显示信息,并在每页显示数量合适的信息。
复制列表
我们经常需要根据既有的列表创建全兴的列表。要复制列表,可创建一个包含整个列表的切片,方法是同事省略起始和终止索引([ : ])。
foods.py
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']
我们创建了一个名为my_foods的食品列表,然后创建了一个名为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)
my favorite foods are:
['pizza', 'falafel', 'carrot cake', 'cannoli']
My friend's favorite foods are:
['pizza', 'falafel', 'carrot cake', 'ice cream']
元组
列表非常适合于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏的角色列表至关重要。然后,有时候你需要创建一系列不可修改的元组,元组可以满足这种需求。Python将不能修改的值称为不可变的,而不可变的列表被称为元组。
定义元组
元组看起来像列表,但使用圆括号而不是方括号来标识。定义元组后就可以使用索引来访问元素,就像访问列表一样。
dimension.py
dimensions=(200,50)
print(dimensions[0])
print(dimensions[1])
200
50
如果修改dimensions元组中的元素,Python会报错,在Python内运行下面代码,看看结果如何。
dimensions=(200,50)
dimensions[0]=100
遍历元组中所有值
像列表一样,也可以用for循环来遍历元组中的所有值
dimensions=(200,50)
for dimension in dimensions:
print(dimension)
200
50
修改元组的变量
虽然不能修改元组的元素,但是可以通过给存储元组的变量赋值。
dimensions=(200,50)
print("Original dimensions:")
for dimension in dimensions:
print(dimension)
dimensions=(400,100)
print("\nModified dimensions:")
for dimension in dimensions:
print(dimension)
Original dimensions:
200
50
Modified dimensions:
400
100