pin_drop当前位置:知识文库 ❯ 图文
Python列表切片
概述
切片(slice)是Python中从列表中提取子序列的强大机制。与索引访问单个元素不同,切片可以一次获取多个元素,并返回一个新的列表。切片语法简洁灵活,支持正序、逆序和步长操作,是Python中最优雅的特性之一。
切片语法
基本格式
切片的基本语法为 list[start:stop:step],其中:
代码示例
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)。
本文涉及AI创作
内容由AI创作,请仔细甄别