负数下标不越界条件是:i 满足 -len(seq) ≤ i < len(seq),其中 seq[-1] 为最后一个元素,seq[-len(seq)] 等价于 seq[0]。
索引访问时负数下标怎么算才不越界
Python 序列(如
、
、
)支持从 0 开始的正向索引,也支持从 -1 开始的反向索引。
指最后一个元素,
等价于
。越界判断很简单:只要
满足
。
常见错误是误以为
是倒数第一个——其实
就是
,它取的是首元素。另外,对空序列
做任何索引(包括
或
)都会直接抛出
。
切片
的边界行为和默认值
切片不会报索引错误,超出范围会自动截断。比如
返回空列表
,
返回
。默认值为:
(正向)、
、
;当
为负时(如
),
默认变成
,
默认变成
,所以
才能完整反转。
→
(左闭右开,不含
)
→
(超出
自动停)
→
(从末尾开始,隔一个取一个)
相加与相乘只允许同类型序列参与
要求左右操作数类型一致:
报
;
也不行。相乘是「重复拼接」,
得
,但
会报错——右操作数必须是整数(
),浮点数或字符串都不行。
立即学习
“
Python免费学习笔记(深入)
”;
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
下载
注意:
是就地操作,对可变序列(如
)会修改原对象;而
和
总是返回新对象。
和
成员检查的性能与陷阱
对
/
是 O(n) 线性扫描,大数据量时很慢;对
是优化过的子串搜索(仍可能较慢);对
或
键才是平均 O(1)。别在循环里反复写
,应提前转成
。
容易忽略的点:
返回
(空字符串是任意字符串的子串);
没问题,但
是
,因为 NaN 不等于自身。
成员检查不触发自定义
以外的逻辑,也不会调用
以外的方法——除非类显式实现了它。
liststrtupleseq[-1]seq[-len(seq)]seq[0]i-len(seq) ,就不会报 IndexErrorseq[-0]-00[][0][-1]IndexError: list index out of range[start:end:step][1,2,3][5:10][]"abc"[1:100]"bc"start=0end=len(seq)step=1step[::-1]start-1end-(len(seq)+1)[::-1][1,2,3,4][1:3][2,3]end[1,2,3,4][1:10:2][2,4]end"hello"[::-2]"olh"+[1,2] + (3,4)TypeError"a" + ["b"]3 * [1,2][1,2,1,2,1,2][1,2] * 3.5int*=list+*innot ininlisttuplestrsetdictif x in my_list:set"" in "abc"TrueNone in [None, 1]float("nan") in [float("nan")]False__eq____contains__