下面用Python内置列表演示序列边界。其他语言或数据结构可能有不同规则,不能把Python的负索引或切片行为直接套用到所有数组。
用短列表看清为什么减1
先设列表只有3项,位置分别为0、1、2。总数可以写成最后索引−开始索引+1,即2−0+1=3。把长度扩大到1024,最后索引就应为1023,因为1023−0+1=1024。边界关系来自起点是0,而不是来自1024有什么特殊性质。若改用从1开始的编号体系,最后编号才会等于总数。
循环上界应与区间约定一致
在Python中,range(1024)从0产生到1023,正好对应1024个位置;结束值1024不会被包含。如果手写条件i≤1024,并且从0开始每次加1,就会尝试1025个值。针对长度为1024的列表,访问非负索引1024会超出范围。更稳妥的写法是使用实际长度,而不是把1024散落在多个循环与判断里。
切片的结束位置不是被读取的元素
对于长度1024的Python列表a,a[0:1024]表示从0开始、到1024之前的全部元素。a[1000:1024]则含24项,因为1024−1000=24。索引读取a[1024]与切片a[0:1024]看起来共用一个数字,含义却不同:前者指定单个元素,后者指定一个不包含终点的区间。这种半开区间便于用终点减起点计算长度。
可执行检查单
- 01把前提写清:确认序列当前长度为1024,并区分日常第几项与程序索引。
- 02检查端点:验证0和1023能定位元素,同时确保正常循环不会访问索引1024。
- 03核对区间长度:采用[start,end)时计算end−start,并把相邻区间的终点与起点对齐。
一个常见问题
Python中的a[-1]是不是越界?
对于非空Python列表,-1表示最后一项,所以长度1024时a[-1]与a[1023]指向同一项。空列表没有最后一项,仍不能这样读取。负索引是Python内置序列的明确规则;这里用它解释另一种定位方式,不建议据此假定所有语言都允许负下标。涉及具体类型时,应查相应文档。
把1024项分成四段进行复核
若每段256项,可用[0,256)、[256,512)、[512,768)、[768,1024)四个区间。每段长度均为256,边界相接而不重叠,合计1024项。最后一段的最后元素仍是1023。本文的列表索引与切片行为、range的结束值规则依据Python官方教程;分段和计数是按这些规则建立的教学例子。
来源与核对
来源核对日期:2026-09-27。本文计算例子由本站按文中声明的条件演算。