【Python 语法糖小火锅 · 第 1 涮】
一、糖味一句话
Python 切片不是简单的「掐头去尾」,而是自带步长的「三维轨道」:
seq[start : stop : step]
,一口气能翻页、能倒带、能跳格。
二、1 行示例 3 连发
s = "abcdefg"
s[::-1] # 'gfedcba' 倒带
s[1::2] # 'bdf' 隔一个取一个
s[slice(-3, None)] # 'efg' slice 对象复用
三、真实场景:日志倒序翻页
需求:只把最后 100 行日志按时间倒序输出(文件太大不能全读)。
from pathlib import Path
last_100 = Path('app.log').read_text().splitlines()[-100:][::-1]
print(*last_100, sep='\n')
解释:
[-100:]
先把末尾 100 行切出来[::-1]
再整体倒序,零临时变量
四、防踩坑小贴士
start/stop
为负值时,-1
指最后一个元素,不是倒数第二个!- 步长为负且
start
/stop
缺省,会自动从尾巴往头跑,所以seq[::-1]
永远安全。 - 想多次复用复杂切片?提前存成 slice 对象:
odd_pos = slice(None, None, 2) # seq[odd_pos] 等价于 seq[::2]
记忆口令 :“冒号双刀,步长为鞭;负步倒带,slice 可盘。”