一、创建切片
1.要创建切片,可指定要使用的第一个元素和最后一个元素的索引。
2.切片与range( )函数一样,在到达你指定的第二个索引前面的元素后停止,即左闭右开。例如,要输出列表中的前三个元素,需要指定索引0~3,这将输出分别为0、1和2的元素。
3.可以生成列表的任何部分。例如如果你要提取列表的第2~4个元素,可将其实索引指定为1,并将终止索引指定为4。
4.如果没有指定第一个索引,python将自动从列表开头开始。
5.如果没有指定最后一个索引,python将默认到最后一个元素结束。例如要提取从低个元素到列表末尾的所有元素,可将起始索引指定为2,并省略终止索引。
6.负数索引返回离列表末尾相应距离的元素,因此可以输出列表末尾的任何切片。例如,如果要输出名单上的最后三名队员,可使用players[-3:]。即使队员名单的长度发生变化,也依然如此。
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3]) # 输出第0到第2个元素
print(players[1:4]) # 输出第1到第4个元素
print(players[:4]) # 没有指定第一个索引时,自动从列表开头开始,输出第0到第4个元素
print(players[2:]) # 没有指定最后一个索引时,默认到末尾,输出第2到最后一个元素
print(players[-3:]) # 负数索引返回离列表末尾相应距离的元素,故输出列表中最后三个元素
二、遍历切片
可以通过在for循环中使用切片来遍历列表的部分元素。如遍历前三名队员,并打印他们的名字:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print("Here are the first three players on my team:")
for player in players[:3]:
print(player.title())
三、复制列表
1.方法:可以创建一个包含整个列表的切片,方法是同时省略起始索引和终止做阴([ :])。这样做让Python创建一个始于第一个元素,终止于最后一个元素的切片,即复制了整个列表。
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)
for my_food in my_foods:
print(my_food)
print("\nMy friend's favorite foods are:")
print(friend_foods)
for friend_food in friend_foods:
print(friend_food)
上面的例子中,首先创建了一个名为my_foods的食品列表,然后创建了一个名为friend_foods的新列表。在不指定任何索引的情况下从列表my_foods中提取一个切片,从而创建了这个列表的副本,再将该副本存储到变量friend_foods中。为核实确实是两个列表,在my_foods和friend_foods列表中分别添加一种食品,可以看到是两个不同的列表。
2.简单地将一个列表赋给另一个列表,就不能得到两个列表。
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_foods赋给friend_foods,而不是将my_foods的副本存储到friend_foods中。这种语法实际上是让Python将新变量friend_foods关联到包含在my_foods中的列表,因此这两个变量都指向同一个列表,所以此时my_foods和friend_foods其实是一个列表。故最后添加的两个元素都出现在了两个列表中。