当前位置:首页>python>教你搞定python基础知识:列表的切片:魔法剪刀

教你搞定python基础知识:列表的切片:魔法剪刀

  • 2026-09-10 12:34:29
教你搞定python基础知识:列表的切片:魔法剪刀

欢迎回来!上一课我们让程序学会了自动化处理列表里的每一个元素。但生活不总是“全都要”,更多时候我们只关心一部分:比如榜单前三名、一周的前五天、或者上个月的订单记录。这时候,就需要拿出我们的“魔法剪刀”——切片(Slicing) 了。

小提示 :可以把列表想象成一根法棍面包,切片就是用它切出你想要的其中一段。你只需要告诉Python:“从这儿切到那儿,给我这一块。”

1. 初试剪刀:如何切出切片

切片的语法非常直观:在列表名后面加上一个方括号,里面用冒号分隔起始索引和结束索引:列表名[起始索引:结束索引]。

和range()函数类似,切片也是“顾头不顾尾”——包含起始索引的元素,但不包含结束索引的元素。

python

我们还是用那个熟悉的列表

players = ['查尔斯', '马丁', '迈克尔', '弗洛伦斯', '刘易斯']
print("我们的完整列表:", players)

切出第2个到第4个元素(索引1到索引3)

包含索引1的'马丁',包含索引2的'迈克尔',不包含索引3的'弗洛伦斯'?等等,需要仔细看!

正确的:索引1到索引3,包含1和2,不包含3?不对,索引3是'弗洛伦斯',如果目标是2-4名,应该是索引1到索引4

更清晰的例子:获取第2、3、4名队员(索引1、2、3)

slice_players = players[1:4] # 从索引1开始,到索引4之前停止(即索引1,2,3)
print(f"第2到第4名队员是:{slice_players}") # 输出:['马丁', '迈克尔', '弗洛伦斯']

获取前3名队员(索引0、1、2)

top3 = players[0:3]
print(f"前三名:{top3}") # 输出:['查尔斯', '马丁', '迈克尔']

代码拆解一下:

  • players[1:4]:告诉Python,从索引1(马丁)开始拿,一直拿到索引4之前(即索引3,刘易斯?等一下,索引3是弗洛伦斯),所以结果是索引1、2、3的元素。没错。

  • 这种“含头不含尾”的设计,让你能清晰地知道切片长度:结束索引 - 起始索引 = 切片元素个数。比如[1:4]的长度就是3个元素。

2. 切片的几种“快捷手法”

如果你经常切面包,就会知道有些切法很常用,Python也为这些情况提供了快捷方式。

python
players = ['查尔斯', '马丁', '迈克尔', '弗洛伦斯', '刘易斯']

1. 从开头切到指定位置:省略起始索引

获取前3名队员(等价于 [0:3])

first_three = players[:3]
print(f"省略起始,前三人:{first_three}") # 输出:['查尔斯', '马丁', '迈克尔']

2. 从指定位置切到末尾:省略结束索引

获取后3名队员(从索引2到结束)

last_three = players[2:]
print(f"省略结束,后三人:{last_three}") # 输出:['迈克尔', '弗洛伦斯', '刘易斯']

3. 复制整个列表:同时省略起始和结束索引

copy_of_players = players[:]
print(f"列表的完整副本:{copy_of_players}") # 输出整个列表
print(f"验证是否是副本:{copy_of_players is players}") # 输出:False (说明是两个不同的列表)

重要提醒 :players[:]创建了一个全新的列表,内容与原列表一样。这和直接赋值new_list = players不同,后者只是给原列表起了个别名,两个变量指向同一个列表,修改其中一个会影响另一个。

3. 遍历切片:处理部分元素

切片的结果本身就是一个新列表,所以它可以和for循环完美配合,让你只处理列表中的部分元素。

python
players = ['查尔斯', '马丁', '迈克尔', '弗洛伦斯', '刘易斯']
print("宣布本次比赛的前三名:")

只遍历切片中的前三位队员

for player in players[:3]:
print(f" 优胜者:{player}")

输出:

宣布本次比赛的前三名:

优胜者:查尔斯

优胜者:马丁

优胜者:迈克尔

4. 实战演练:用切片分析数据

假设我们有一周七天的销售额,想快速看一下前五天的“工作日”表现和后两天的“周末”表现。

python
sales = [120, 85, 90, 110, 95, 200, 180]
days = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']

工作日销售额(前5天)

weekday_sales = sales[:5]
print(f"工作日销售额:{weekday_sales},平均为:{sum(weekday_sales)/5:.1f}")

周末销售额(后2天)

weekend_sales = sales[5:]
print(f"周末销售额:{weekend_sales},平均为:{sum(weekend_sales)/2:.1f}")

输出:

工作日销售额:[120, 85, 90, 110, 95],平均为:100.0

周末销售额:[200, 180],平均为:190.0

九、动手练习:玩转你的“魔法剪刀”

今天你学会了如何灵活地裁剪列表。请用这些新技能解决下面几个小问题:

  1. 榜单切片:

    • 创建一个包含至少8个你最爱电影(或书籍、歌曲)的列表,命名为my_favorites。

    • 打印消息:“我的前3名是:”,然后通过切片打印前三个项目。

    • 打印消息:“我的最后2名是:”,然后通过切片打印最后两个项目。

    • 打印消息:“我的中间最爱(第3到第5部)是:”,然后通过切片打印索引2到4的项目。

  2. 自助餐复盘:

    • 有一个自助餐厅的菜品列表:buffet = ('沙拉', '面包', '汤', '牛排', '蛋糕')(这其实是元组,但我们可以先把它当作列表来练习切片)。

    • 请用切片取出并打印餐厅提供的“前菜部分”(前两个菜品)和“主菜部分”(中间两个菜品)。

  3. 好友的副本:

    • 创建你的好友列表my_friends = ['小明', '小红', '小刚', '小丽']。

    • 使用切片创建my_friends的一个副本,命名为friends_copy。

    • 分别向原列表my_friends和副本friends_copy中添加一个不同的新朋友。

    • 打印两个列表,观察它们是否各自独立,互不影响。

结束语

恭喜你,现在你不仅能让程序自动化处理列表,还能像用剪刀一样精准地裁出你需要的部分。切片是处理数据时的高频技巧,非常实用。有了循环和切片这两样武器,你已经能应对很多有趣的编程任务了。

明天,我们将正式认识Python中另一个重要的结构——元组。它像是列表的“不可变”版本,在某些场景下能保护你的数据不被意外修改。就像一个带有封印的“不变列表”,敬请期待!

有任何疑问或想展示你的“裁剪”成果,欢迎在评论区留言。代码越敲越顺,我们明天见!

最新文章

随机文章