详解Python中的高级特性:切片

Published on 2025-05-15 16:06 in 分类: 随笔 with 狂盗一枝梅
分类: 随笔

Python 中的切片(Slicing)操作是一种高效且灵活的数据访问方式,主要用于序列类型(如列表、字符串、元组等)。它允许通过指定起始、结束和步长来截取序列的子集。其基本语法如下所示:

sequence[start:stop:step]
  • start:起始索引(包含),默认为 0
  • stop:结束索引(不包含),默认为序列长度。
  • step:步长(可选),默认为 1,值表示步长;正负表示方向

一、特性

(1) 索引规则

  • 正向索引:从 0 开始,左到右。
  • 负向索引:从 -1 开始(倒数第一个),右到左。

(2) 默认值

  • 省略 start:从序列开头开始(0)。
  • 省略 stop:截取到序列末尾(包括最后一个元素)。
  • 省略 step:默认为 1(连续截取)。

(3) 步长(step)

  • 正步长:从左到右截取。
  • 负步长:从右到左截取(可实现逆序)。

二、常见操作示例

(1) 基本截取

s = [0, 1, 2, 3, 4, 5]
print(s[1:4])    # [1, 2, 3](包含1,不包含4)
print(s[:3])     # [0, 1, 2](从开头到索引2)
print(s[3:])     # [3, 4, 5](从索引3到末尾)

(2) 负索引

print(s[-3:])     # [3, 4, 5](倒数第3个到末尾)
print(s[:-2])     # [0, 1, 2, 3](开头到倒数第3个)

(3) 步长应用

print(s[::2])     # [0, 2, 4](每隔1个取1个)
print(s[::-1])    # [5, 4, 3, 2, 1, 0](逆序)
print(s[1:5:2])   # [1, 3](从1到4,步长2)

(4) 字符串切片

text = "Python"
print(text[1:4])  # "yth"
print(text[::-1]) # "nohtyP"

三、注意事项

  1. 越界安全:切片索引超出范围时自动截断,不会报错。

    s = [1, 2, 3]
    print(s[0:10])  # [1, 2, 3](自动限制到有效范围)
    
  2. 浅拷贝:切片返回的是新对象,但对可变序列的修改可能影响原数据(如嵌套列表)。

  3. 不可变序列:字符串、元组的切片会生成新对象,原对象不可变。

四、 高级技巧

(1) 赋值与修改

s = [0, 1, 2, 3]
s[1:3] = [10, 20]  # 替换子序列 → [0, 10, 20, 3]
s[::2] = [100, 200] # 按步长赋值 → [100, 10, 200, 3]

(2) 删除元素

s = [0, 1, 2, 3]
s[1:3] = []  # 删除索引1-2 → [0, 3]

五、总结

操作 示例 效果
基本切片 s[1:4] 截取索引1到3的子序列
逆序 s[::-1] 反转序列
步长截取 s[::2] 每隔1个元素取1个
负索引 s[-3:] 截取最后3个元素
赋值与修改 s[1:3]=[10,20] 替换指定范围的元素

注:以上内容由LLM生成


#python
复制 复制成功