一、切片的作用
切片以简洁、高效的方式从序列类型(如列表、元组、字符串)中获取子序列,无需循环即可完成复杂的数据操作。
💡 为什么重要?
例如:从100万条数据中提取前1000条,切片只需一行代码,而循环需1000次迭代。
二、切片的语法
sequence[start:stop:step]sequence:待切片的序列(列表、元组、字符串等)。start:起始索引(包含),默认为0。stop:结束索引(不包含),默认为序列长度。step:步长(间隔),默认为1。
📌 关键规则:
左闭右开:[start, stop),即包含start,不包含stop。
负数索引:-1表示最后一个元素,-2表示倒数第二个,依此类推。
步长为负:表示反向切片(需注意start和stop的顺序)。
三、参数详解与说明
⚠️ 注意事项:
🔍索引编号系统
正索引: 0 1 2 3 4 5 6 7 8 9序列: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]负索引: -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
⚙️参数特性说明
创建示例列表nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]start默认为0,stop默认为len(序列)nums[:] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - 完整拷贝nums[3:] # [3, 4, 5, 6, 7, 8, 9] - 从索引3到末尾nums[:7] # [0, 1, 2, 3, 4, 5, 6] - 从开始到索引7(不含)nums[3:7] # [3, 4, 5, 6] - 从索引3到7(不含)
nums[-3:] # [7, 8, 9] - 最后三个元素nums[:-3] # [0, 1, 2, 3, 4, 5, 6] - 除最后三个外的所有元素nums[-5:-2] # [5, 6, 7] - 从倒数第5个到倒数第2个(不含)
nums[::2] # [0, 2, 4, 6, 8] - 所有偶数索引元素nums[1::2] # [1, 3, 5, 7, 9] - 所有奇数索引元素nums[2:8:3] # [2, 5] - 从索引2到8,每隔3个取一个
四、实用示例
1. 基础切片(正向)
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]提取索引1到4(不包含4)的元素print(my_list[1:4]) # 输出: [1, 2, 3]从开头到索引3(不包含3)print(my_list[:3]) # 输出: [0, 1, 2]从索引5到末尾print(my_list[5:]) # 输出: [5, 6, 7, 8, 9]整个序列(复制)print(my_list[:]) # 输出: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2. 带步长的切片
步长为2(每隔1个元素取1个)print(my_list[::2]) # 输出: [0, 2, 4, 6, 8](从0开始,步长2)从索引1开始,步长2print(my_list[1::2]) # 输出: [1, 3, 5, 7, 9]步长为-1(反转序列)print(my_list[::-1]) # 输出: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
3. 负数索引切片
从倒数第3个元素到末尾print(my_list[-3:]) # 输出: [7, 8, 9](-3对应索引7)从开头到倒数第2个元素(不包含)print(my_list[:-2]) # 输出: [0, 1, 2, 3, 4, 5, 6, 7](倒数第2个是8,不包含)反向切片:从倒数第2个到倒数第5个(步长-1)print(my_list[-2:-5:-1]) # 输出: [8, 7, 6](注意:start > stop 时需用负步长)
4. 字符串切片(与列表同理)
s = "Hello, World!"print(s[0:5]) # 输出: "Hello"(索引0-4)print(s[7:]) # 输出: "World!"(从索引7开始)print(s[::-1]) # 输出: "!dlroW ,olleH"(反转字符串)
五、切片应用总结表
✨ 一句话掌握:
“切片 = 起始位置 + 结束位置 + 步长,左闭右开,负数索引从末尾计数。”