前面我们学习了如何访问单个列表元素。也学习了如何处理列表的所有元素。
那我们还可以处理列表的部分元素----Python称为【切片】。
切片
要创建切片,可指定要使用的第一个元素的索引和最后一个元素的索引加1。与函数range()一样,Python在到达你指定的第二个索引前面的元素后停止。要输出列表中的前三个元素,需要指定索引【0~3】,这将输出分别为,0,1,2。
示例代码:
players = ['charles','martina','michael','florence','eli']
print ( players[0:3] ) #打印该列表的一个切片。其中只包含三名队员,输出也是一个列表。
输出结果:
['charles', 'martina', 'michael']
[Finished in 0.2s]
如果我们没有指定第一个索引,Python将自动从列表的开头开始:
代码示例:
players = ['charles','martina','michael','florence','eli']
print ( players[ :3] )
结果如下:
['charles', 'martina', 'michael']
[Finished in 0.1s]
要让切片终止于列表的末尾,也可使用类似的语法。
代码示例:
players = ['charles','martina','michael','florence','eli']
print ( players[ 2: ] )
结果如下:
['michael', 'florence', 'eli']
[Finished in 0.0s]
无论列表多长,这种语法都能够让你输出从特定的位置到列表末尾的所有元素。本书前面说过,负数索引返回离列表末尾相应举例的元素。因此你可以输出列表末尾的任何切片。
示例代码:
players = ['charles','martina','michael','florence','eli']
print ( players[ -3 : ] )
返回结果:
players = ['charles','martina','michael','florence','eli']
print ( players[ -3 : ] )
遍历切片
如果要遍历列表的部分元素,可在for循环中使用切片。
示例代码:
players = ['charles','martina','michael','florence','eli']
for player in players [1:4]:
print ( player.title() )
输出结果:
Martina
Michael
Florence
[Finished in 0.0s]
复制列表
我们经常需要根据既有列表创建全新的列表。
要复制列表,先创建一个包含整个列表的切片,方法是同时省略,起始索引和终止索引[ : ]。
my_foods = ['pizza','falafel','carrot cake']
friend_foods = my_foods[ : ]
print (my_foods)
print (friend_foods)
输出结果如下:
['pizza', 'falafel', 'carrot cake']
['pizza', 'falafel', 'carrot cake']
[Finished in 0.1s]
为了核实我们确实有两个列表,下面在每个列表中都添加一个食品,并核实每个列表都记录了相应不同的食品。
代码示例:
my_foods = ['pizza','falafel','carrot cake']
friend_foods = my_foods[ : ]
my_foods.append('cannoli')
friend_foods.append('ice cream')
print (my_foods)
print (friend_foods)
返回结果:
['pizza', 'falafel', 'carrot cake', 'cannoli']
['pizza', 'falafel', 'carrot cake', 'ice cream']
[Finished in 0.1s]
上面输出的结果显示,我们有两个完全不懂的列表。
如果我们只是简单的将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_foods)
print (friend_foods)
输出结果:
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']
[Finished in 0.1s]
上面代码将my_foods赋值给friend_foods而不是将my_foods的副本存储在friend_foods这种语法实际上是让Python将新变量friend_foods关联到包含在my_foods中的列表,所以这两个变量都指向同一个列表。
注意:
现在暂时不考虑上面示例中的细节,基本上,当我们试图使用列表的副本时,如果结果出乎意料,请确认你像第一个示例那样使用切片复制了列表。
元组
Python将不能修改的值称为不可变的,而不可变的列表称为【元组】。
定义元组
元组看起来像列表。但使用的是圆括号而不是方括号来标识。
定义元组以后,就可以使用索引来访问其元素,就像访问列表一样。
代码示例:
dimensions = ( 200 , 50 )
print ( dimensions[0] ) #访问元组里面的元素时,后面也是使用方括号来索引
print ( dimensions[1] )
输出结果如下:
200
50
[Finished in 0.0s]
遍历元组中的所有元素
也是使用for循环来遍历
代码示例:
dimensions = ( 200 , 50 )
for dimension in dimensions:
print ( dimension )
输出结果:
200
50
[Finished in 0.1s]
修改元组变量
虽然不能修改元组的元素,但是可以给存储元组的变量赋值。
示例代码:
如果要修改前面说的矩形的尺寸,可重新定义整个元组。
dimensions = ( 200 , 50 )
for dimension in dimensions:
print ( dimension )
print ('\n')
dimensions = ( 150,75 )
for dimension in dimensions:
print ( dimension )
输出结果如下:
200
50
150
75
[Finished in 0.0s]
相比列表,元组是更简单的数据结构,如果需要存储一组值,在程序的整个生命周期内都不变,可使用元组。