python切片可高效截取并反转,时间复杂度o(k);使用[start:end:step],step=-1实现反转,负步长时start必须大于end,否则返回空列表。

Python切片本身就能高效完成截取和反转,不需要额外函数或循环——底层由C实现,时间复杂度 O(k),k 为切片长度。
用 [start:end:step] 一次性完成截取+反转
反转本质是 step = -1,而截取范围由 start 和 end 控制。关键在于负索引和 step 为负时的边界行为:
-
my_list[5:2:-1]从索引 5 开始,往左取到(但不包括)索引 2,结果是[my_list[5], my_list[4], my_list[3]] -
my_list[::-1]是完整反转,等价于list(reversed(my_list)),但更快、更简洁 - 若只想要后 3 个元素的反转:
my_list[-1:-4:-1]或更稳妥写法my_list[:-4:-1](避免起始越界)
常见翻车点:负步长下 start 和 end 的方向反了
当 step 为负时,start 必须大于 end,否则返回空列表。这不是 bug,是设计逻辑:
-
"hello"[2:0:-1]→"ll"(从索引 2 到索引 0 左侧,步长 -1) -
"hello"[0:2:-1]→""(0 - 安全做法:用
None代替数字起/止位,如s[::-1]、s[:3:-1]、s[7::-1]
slice() 对象适合复用或动态切片逻辑
当你需要多次使用同一套切片规则,或切片参数来自变量/配置时,显式构造 slice 更清晰、可读性更强:
reverse_last_three = slice(None, -4, -1) # 等价于 [:-4:-1] data = [1, 2, 3, 4, 5, 6] result = data[reverse_last_three] # [6, 5, 4]
比拼接字符串或格式化索引更可靠,也避免在循环中重复解析切片语法。
真正要注意的是:切片返回新对象(浅拷贝),对原序列无影响;但若序列内含可变对象(如嵌套 list),反转后其内部引用不变——这点容易被忽略。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











