pin_drop当前位置:知识文库 ❯ 图文

Python列表切片

概述

切片(slice)是Python中从列表中提取子序列的强大机制。与索引访问单个元素不同,切片可以一次获取多个元素,并返回一个新的列表。切片语法简洁灵活,支持正序、逆序和步长操作,是Python中最优雅的特性之一。


切片语法

基本格式

切片的基本语法为 list[start:stop:step],其中:

参数 含义 默认值 说明
start 起始索引 0 包含该位置的元素
stop 结束索引 len(list) 不包含该位置的元素
step 步长 1 每次索引的增量

代码示例

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(nums[2:6])
print(nums[:5])
print(nums[5:])
print(nums[:])

正序切片

正序切片是最常用的切片方式,从左到右提取元素:

代码示例

letters = ["a", "b", "c", "d", "e", "f", "g"]

print(letters[1:4])
print(letters[:3])
print(letters[4:])
print(letters[::2])
print(letters[1::2])

使用负索引切片

切片中的 start 和 stop 也可以使用负索引:

代码示例

nums = [10, 20, 30, 40, 50, 60, 70]

print(nums[-3:])
print(nums[:-2])
print(nums[-5:-2])

逆序切片

当 step 为负数时,切片从右向左进行。这是反转列表的常用技巧:

代码示例

nums = [1, 2, 3, 4, 5]

print(nums[::-1])
print(nums[::-2])
print(nums[4:1:-1])

提示:当 step 为负数时,start 应大于 stop,否则结果为空列表。


步长切片

step 参数控制每次跳过多少个元素:

代码示例

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(nums[::3])
print(nums[1::3])
print(nums[::4])
print(nums[::-3])

步长为0会报错

代码示例

nums = [1, 2, 3]
print(nums[::0])

切片赋值

切片不仅可以读取,还可以用于赋值,实现批量修改、插入和删除:

批量替换

代码示例

nums = [1, 2, 3, 4, 5]
nums[1:3] = [20, 30]
print(nums)

插入元素

代码示例

nums = [1, 2, 5]
nums[2:2] = [3, 4]
print(nums)

删除元素

代码示例

nums = [1, 2, 3, 4, 5]
nums[1:4] = []
print(nums)

步长赋值

代码示例

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
nums[::2] = [100, 200, 300, 400, 500]
print(nums)

提示:步长赋值时,右侧的元素数量必须与左侧切片选中的元素数量一致。


代码示例

综合示例:切片的各种用法

代码示例

data = list(range(1, 21))
print(f"原始数据: {data}")

first_five = data[:5]
print(f"前5个: {first_five}")

last_three = data[-3:]
print(f"后3个: {last_three}")

even = data[1::2]
print(f"偶数位: {even}")

reversed_data = data[::-1]
print(f"反转: {reversed_data}")

middle = data[5:15:3]
print(f"中间每隔3个: {middle}")

copy_data = data[:]
print(f"切片复制: {copy_data is data}")

注意事项

  • 切片返回新列表:切片操作总是返回一个新列表,不会修改原列表

  • stop不包含:切片的 stop 索引对应的元素不包含在结果中

  • 越界不报错:切片的索引超出范围不会报错,会自动调整到合法范围

  • 空切片:如果范围无效(如 step 为正但 start > stop),返回空列表

  • 切片赋值:切片赋值会修改原列表,且右侧可以是任意可迭代对象

  • 浅拷贝list[:] 创建的是浅拷贝,嵌套的可变对象仍共享引用


小结

本节详细介绍了列表切片的语法 list[start:stop:step],包括正序切片、逆序切片、步长切片以及切片赋值。切片是Python中极其优雅的特性,熟练掌握切片可以大幅简化代码,提高编程效率。


练习题

练习1

给定列表 nums = list(range(1, 31)),使用切片分别获取:前10个元素、后10个元素、所有3的倍数、反转后的列表。

练习2

给定列表 data = [1, 2, 3, 4, 5, 6, 7, 8],使用切片赋值将索引2到5的元素替换为 [30, 40, 50, 60],然后再使用切片赋值删除索引1到3的元素。

常见问题

切片和索引有什么区别?

索引用于访问单个元素,如 list[0];而切片用于访问多个元素,返回一个新列表,如 list[1:4] 会返回索引1到3的元素组成的新列表。

切片会修改原列表吗?

切片读取操作不会修改原列表,它总是返回一个新的列表。但切片赋值(如 list[1:3] = [x, y])会修改原列表。

如何使用切片反转列表?

使用 list[::-1] 即可反转列表。step 为负数时,切片从右向左进行,从而实现反转。

切片索引超出范围会报错吗?

不会报错。切片的索引超出范围时会自动调整到合法范围,这与索引访问不同(索引越界会抛出 IndexError)。

标签: Python切片 列表操作 步长切片 切片赋值 负索引 Python教程

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python列表创建与访问 下一篇: Python列表append()方法

poll相关推荐

作者头像 智能小晨 python

Python元组命名namedtuple

发布日期 2026-05-31
深入学习Python命名元组namedtuple,掌握字段访问、_make创建、_asdict转字典、_replace替换字段等核心方法。理解命名元组与普通元组的区别,写出更清晰易读的Python代码。
作者头像 智能小晨 python

Python元组解包

发布日期 2026-05-31
全面学习Python元组解包技巧,包括基本解包、星号扩展解包、嵌套解包、交换变量和函数多值返回。掌握优雅的Python赋值语法,让你的代码更简洁高效。
作者头像 智能小晨 python

Python元组index方法

发布日期 2026-05-31
深入学习Python元组index()方法,掌握元素索引查找技巧。了解index()语法、指定范围查找、安全查找方法和实际应用场景,避免ValueError异常,提升Python编程效率。
作者头像 智能小晨 python

Python元组count方法

发布日期 2026-05-31
深入学习Python元组count()方法,掌握元素出现次数统计技巧。了解count()语法、性能优化建议、嵌套元组统计和实际应用场景,配合练习题巩固所学知识。