外链论坛

 找回密码
 立即注册
搜索
查看: 33|回复: 0

Python入门第9课-切片

[复制链接]

2592

主题

412

回帖

9118万

积分

论坛元老

Rank: 8Rank: 8

积分
91180629
发表于 2024-8-17 22:06:45 | 显示全部楼层 |阅读模式

前面讲到了怎样拜访列表的单个元素以及处理全部列表,接下来讲怎样处理列表的部分元素,Python中叫作之为切片。

9.1 切片

要创建切片,可指定要运用第1个元素和最后一个元素的索引,Python在到达指定的第二个索引前面的元素后停止。例如,要输出列表中前三个元素,必须指定索引0-3,这将输出索引分别为0、1、2的元素。

numbers.py

① numbers = [1,4,7,2,6]

② print(numbers[0:3])

第②行 的代码将打印列表的一个切片,其中只包括三个元素。输出结果是一个列表,即切片是列表的子集:

[1,4,7]

利用切片,你能够生成列表的任何子集。例如,想提取列表的第2-4个元素,可将初始索引指定为1,终止索引指定为4:

① numbers = [1,4,7,2,6]

② print(numbers[1:4])

这一次,切片始于 4,最终2:

[4,7,2]

倘若指定第1个索引,默认从列表的开头起始

① numbers = [1,4,7,2,6]

② print(numbers[:4])

因为指定初始索引,默认从索引0起始

[1,4,7,2]

倘若指定终止索引,默认终止与列表末尾:

① numbers = [1,4,7,2,6]

② print(numbers[1:])

Python返回从第2个元素到列表末尾的所有元素:

[4,7,2,6]

这种语法能够让你输出从特定位置到列表末尾的所有元素,无论列表多长。前面讲过负数索引返回离列表末尾相应距离的元素,因此呢能够输出列表末尾的任何切片。例如,输出列表的最后三个数字能够运用numbers[-3:]:

① numbers = [1,4,7,2,6]

② print(numbers[-3:])

以上代码打印从列表倒数第三个元素起始到列表末尾的切片:

[7,2,6]

9.2 遍历切片

倘若要遍历列表的部分元素,可在for循环中运用切片,例如:

# -*- coding:utf-8 -*-

① numbers = [1,4,7,2,6]

② for number in numbers[:3]:

③ print("您的幸运数字是%d" % number)

第①行 的代码只遍历了列表的前3个数字,遍历全部列表:

您的幸运数字是1

您的幸运数字是4

您的幸运数字是7

切片有非常多功效,例如,编写游戏时运用列表保留用户的游戏得分,为了取出用户的TOP得分,能够将列表进行降序摆列,再创建一个只包括前三个得分的切片。最平常的是运用切片来分页表示信息,一个列表存储100个商品,一页表示10个,第1表示[:10],第二页表示[10:20]......。

9.3 复制列表

要复制列表,可创建一个包括全部列表的切片,办法同期省略初始和终止索引[:]。

例如,有一个列表,里面存储了你最爱吃的三种巧克力,你有一个好基友/好闺蜜,不仅爱好吃你爱吃的,还爱好其他的,此刻想创建一个列表用来存储好基友/好闺蜜最爱吃的:

# -*- coding:utf-8 -*-

① my_foods = ["Dove","Lindt","Meiji"]

② friend_foods = my_foods[:]

print("我最爱吃的食品:")

print(my_foods)

print("\n我的好伴侣爱吃的食品:")

print(friend_foods)

第②行 从列表my_foods中提取了一个切片,由于指定任何索引,从而创建了这个列表的副本,再将这个副本存储到变量friend_foods中。打印每一个列表,发掘结果的确是相同的:

我最爱吃的食品

[Dove, Lindt, Meiji]

我的好伴侣爱吃的食品

[Dove, Lindt, Meiji]

为核实咱们的确得到了两个列表,此刻每一个列表中添加一个新食品,并核实每一个列表确实都记录了相应人员爱好的食品:

# -*- coding:utf-8 -*-

① my_foods = ["Dove","Lindt","Meiji"]

② friend_foods = my_foods[:]

③ my_foods.append("LeShi")

④ friend_foods.append("cannoli")

print("我最爱吃的食品:")

print(my_foods)

print("\n我的好伴侣爱吃的食品:")

print(friend_foods)

第③行 向列表my_foods中添加了"LeShi";

第④行 向列表friend_foods中添加了"cannoli";

打印结果表示,这两种食品的确包括在正确的列表中:

我最爱吃的食品

[Dove, Lindt, Meiji,LeShi]

我的好伴侣爱吃的食品

[Dove, Lindt, Meiji,cannoli]

那样为何运用切片的形式进行列表的复制,而不是直接运用friend_foods = my_foods 呢?由于运用这般的方式得不到两个列表,而是得到同一个列表。下面的例子演示了不运用切片的状况下复制列表的状况

# -*- coding:utf-8 -*-

my_foods = ["Dove","Lindt","Meiji"]

# 这种办法得到的是同一个列表

friend_foods = my_foods

my_foods.append("LeShi")

friend_foods.append("cannoli")

print("我最爱吃的食品:")

print(my_foods)

print("\n我的好伴侣爱吃的食品:")

print(friend_foods)

这儿将my_foods赋值给friend_foods,而不是将my_foods的副本存储到friend_foods。这种语法实质上是让Python将新变量friend_foods相关包括在my_foods的列表,因此呢这两个变量都指向同一个列表(能够理解为这两个变量都指向了同一个列表的内存位置)。因此呢,当将"LeShi"添加到my_foods中时,它会出此刻friend_foods中;一样,虽然"cannoli"好似只被添加到了friend_foods中,但它一样将出此刻my_foods中。

输出显示,两个列表是相同的,但这并非是咱们想要的结果:

我最爱吃的食品

[Dove, Lindt, Meiji,LeShi,cannoli]

我的好伴侣爱吃的食品

[Dove, Lindt, Meiji,LeShi,cannoli]

9.4 实例练习

实例1:

创建一个列表,用来存储你最想去旅行的10个地区

运用切片打印列表的前3个元素;

运用切片打印列表的最后3个元素;

运用切片打印中间的3个元素。

实例2:

创建实例1中列表的副本,用来存储你好友最想去的旅行目的地(假设你想去的地区你好友皆想去)。

在原来的列表中添加一个新的目的地;

在好友的列表中添加一个新的目的地;

核实你有两个区别的列表,运用for循环分别打印列表,经过输出结果验证确实有两个区别的列表。

如有问题,欢迎在留言区留言,感谢。

欢迎关注:Python公开课,一块创造有趣的事儿

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-10-4 00:33 , Processed in 0.061635 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.