跳到主要内容

切片专题

切片是 Python 里最好用、也最值得早点熟悉的语法之一。它不仅能取子序列,还能反转、跳步、浅拷贝,很多代码写顺以后会非常自然。

基本语法

sequence[start:stop:step]
  • start:开始位置,包含
  • stop:结束位置,不包含
  • step:步长

最常见的几种写法

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

print(nums[1:4]) # [1, 2, 3]
print(nums[:3]) # [0, 1, 2]
print(nums[3:]) # [3, 4, 5]
print(nums[::2]) # [0, 2, 4]
print(nums[::-1]) # [5, 4, 3, 2, 1, 0]

负索引

text = "abcdef"

print(text[-1]) # f
print(text[-3:]) # def

负索引从末尾开始数,很适合处理“最后几个元素”。

切片不仅能读,也能改

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

也可以删掉一段:

del nums[2:4]

常见用途

1. 浅拷贝列表

copied = nums[:]

2. 反转序列

reversed_text = text[::-1]

3. 每隔几个取一次

evens = nums[::2]

一个容易忽略的点

切片通常会返回新对象,但“是不是完全独立”还要看序列里的元素本身是否可变。更具体的例子可以看:

我的速记方式

  • [:n]:前 n
  • [n:]:从 n 到结尾
  • [-n:]:最后 n
  • [::k]:每隔 k 个取一次
  • [::-1]:反转

关联阅读