Python元组仅4个元素时,val[-8:-3]为何输出('indore',)而非报错?
Python元组切片超出索引范围的运行原理
首先要明确:Python中所有序列类型(包括元组、列表、字符串)的切片操作都不会因索引超出边界报错,而是自动将超出的索引修正为序列的有效边界。
针对你的例子:
先明确元组的有效索引
元组val = ("indore", "pune", "Goa", "Delhi")长度为4,有效索引:- 正索引:
0(indore)、1(pune)、2(Goa)、3(Delhi) - 负索引:
-4(indore)、-3(pune)、-2(Goa)、-1(Delhi)
- 正索引:
解析切片
val[-8:-3]的执行逻辑- 起始索引
-8:这个值小于元组最小的负索引-4,Python自动将其修正为序列的起始位置,也就是正索引0。 - 结束索引
-3:转换为正索引是4 + (-3) = 1(负索引计算公式:len(序列) + 负索引)。 - 切片遵循左闭右开规则,即包含起始索引对应的元素,不包含结束索引对应的元素。所以实际取的是索引
0到1之前的元素,也就是仅索引0对应的"indore",最终返回单元素元组('indore',)。
- 起始索引
内容的提问来源于stack exchange,提问作者user23111381
相关产品推荐
相关产品推荐

