在Python中,索引和切片是操作序列类型(如列表、字符串等)的核心手段。我们首先从最基本的索引方式入手:使用单个整数进行索引。对于一个已定义的序列a,其基本语法为a[index],其中index表示元素的位置下标。
尽管这一概念看似简单,但Python提供了一个非常实用的语法特性——负数下标。当index取值为-n时,表示访问倒数第n个元素。例如,a[-1]对应最后一个元素,a[-2]则指向倒数第二个元素,以此类推。为了更清晰地展示索引范围,以下表格直观呈现了各个下标所对应的元素位置。
早期版本的Python仅支持形如a[start:stop]的基本切片语法。随着语言的发展,后续引入了更为灵活的形式,即“扩展切片”:a[start:stop:step]。虽然名称上仍保留“扩展”的说法,但实际上这已是现代Python标准的一部分,无需特别关注其历史称谓。
扩展切片的核心在于新增了步长参数step,它必须是一个非零整数。该表达式的执行逻辑是从start位置开始,以step为步长逐个选取元素,直到越过stop位置为止,且不包含stop本身。值得注意的是,当step=1时,扩展切片就退化为常见的基本切片形式。
step为正数的情况
当步长step > 0时,切片按正向顺序遍历序列。此时start和stop均可省略,若缺省,Python会自动填充以尽可能覆盖最大有效区间:
- 若未指定
start,默认从序列起始处(可理解为“负无穷”)开始; - 若未指定
stop,默认延伸至序列末尾(可理解为“正无穷”)。
示例代码如下:
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[:5]
[0, 1, 2, 3, 4]
>>> a[5:]
[5, 6, 7, 8, 9]
>>> a[100:]
[]
>>> a[0:6:2]
[0, 2, 4]
>>> a[::2]
[0, 2, 4, 6, 8]
>>> a[:-2:2]
[0, 2, 4, 6]
>>> a[4::2]
[4, 6, 8]
step为负数的情况
当step < 0时,切片将按照逆序方式进行,即从高索引向低索引移动,步长大小为|step|。在这种模式下,虽然截断规则保持一致,但缺省值的处理逻辑发生变化:为了保证选取区间最大化,Python会将起始点设得尽可能大,终止点设得尽可能小。
因此,在逆序情况下:
- 缺省的
start被视为“正无穷”,即默认从末尾开始; - 缺省的
stop被视为“负无穷”,即默认延伸到开头之前。
相关示例如下:
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[5::-1]
[5, 4, 3, 2, 1, 0]
>>> a[:4:-2]
[9, 7, 5]
>>> a[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

雷达卡


京公网安备 11010802022788号







