Python切片操作详解:索引方向、步长与增删改实例
本文系统总结Python切片操作的核心机制,涵盖正负索引方向、start/end/step三参数规则及步长对方向的决定作用。通过具体列表示例,演示切片取值、元素替换、数量不等时的替换逻辑及元素插入方法,并展示如何按奇偶索引进行切片筛选,帮助开发者掌握Python序列处理技巧。
文章参考自:link.
前言
近期深入研习Python切片机制,过程中曾经历从困惑到豁然开朗的阶段。为厘清切片操作中常见的疑惑点,特此整理笔记,以便日后查阅与复习。
一、切片的2种索引方向
掌握切片方法即可对目标序列进行灵活截取。然而,可被切片的目标对象存在两种索引方向:正索引与负索引。以下以列表 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 为例进行说明:

该字符串 a 的正索引方向由左至右,头部下标为0,尾部下标为9;
其负索引方向由右至左,头部下标为-1,尾部下标为-10。
二、切片的操作方式
成功执行切片操作需包含两个冒号“:”符号,并涉及3个参数,分别为 start_index(起始索引)、end_index(终止索引)和 step(步长)。一个完整的切片表达式结构如下:
切片操作基本表达式:object[start_index : end_index : step]
1、起始索引 start_index:指定切片开始的位置,且切片结果包含该索引对应的值;
2、终止索引 end_index:指定切片结束的位置,且切片结果不包含该索引对应的值;
3、步长 step:定义切取的步长值,可正可负。当 step 为正时,索引方向为正方向;当 step 为负时,索引方向为负方向。若省略 step 值,默认取值为1。
切记:步长的正负决定了切片的方向,这一点至关重要!!
当未指定 start_index 和 end_index 的值时,均默认从索引的端点处开始取值。
三、一些基本操作
以下示例中使用的对象均为列表 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]。
1、切取单个对象
获取索引为3的位置所对应的值:

2、切取整个列表
不填写具体参数值时,取值范围从端点处开始。

3、步长step正负值决定索引方向的一些案例
当 step=1 时,方向由左向右,结果包含 start_index=1 索引本身的值,但不包括终止索引 end_index=5 本身的值。
// An highlighted block
>>> a [1: 5: ]
[1, 2, 3, 4]
>>> # 步长step = 1,默认值,由左往右正索引方向
当 step = -1 时,方向由右向左,结果同样不包含终止索引=5 本身的值。
// An highlighted block
>>> a [ : 5 :-1]
[9, 8, 7, 6]
>>> # 步长step= -1,负索引,
起始索引没写,表示从端点开始由右往左,终止索引是5
若索引方向相互矛盾,则返回空值。
// An highlighted block
>>> a [7 : 2 ]
[]
>>> # 这是因为起始索引为7终止索引为2,方向是由右往左,
>但是步长step默认是1,表示正索引,由左往右,两者方向矛盾值为空
当索引值为负时,一切以 step 值的正负为准,由其决定索引方向!
// An highlighted block
>>> a [ -6 : :]
[4, 5, 6, 7, 8, 9]
>>> #起始于 start_index = -6,步长为1,由左向右
根据前述规则,切片结果包含起始索引位置的值,但不包含终止索引位置的值。此规则适用于给定了具体终止索引的情况,如下所示:
// An highlighted block
>>> #给了明确的终止索引位置,那结果就不包含终止索引本身的值
如下不包含end_index = 5位置上的值
>>> a [ : 5 : -1 ]
[9, 8, 7, 6]
此案例中包含了终止索引位置的值,可与上一条规则进行对比分析。
也就是说,如果指定了具体的终止索引位置,取值不包括该位置上的值;如果未指定,则默认终止索引位于端点处,此时取值包括该位置的值。
// An highlighted block
>>> a [ 5: : -1]
[5, 4, 3, 2, 1, 0]
>>> #没有指定具体的终止索引位置,所以默认终止于端点处,
因此包含端点处的值,即0
四、进阶操作
1.修改某个元素值
直接将修改后的值代入索引位置即可。
// An highlighted block
>>> a [ 2 ] = [ 'A' ]
>>> print (a)
[0, 1, ['A'], 3, 4, 5, 6, 7, 8, 9]
#直接在需要修改的索引处赋值,将索引值 = 2的值修改为['A']
2.替换元素值
从起始索引开始,包含起始索引本身的值,将新数值插入,随后将终止索引本身及以后的值紧跟在插入数值后面即可(不包含终止索引本身)。以下以替代索引3和5之间的元素为例进行分析。
包含“起始索引=3”的元素本身,不包含“终止索引=5”的元素本身,涉及元素个数应为2个。
(1)给定替换的元素个数 = 2
// An highlighted block
>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print (a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a [ 3: 5] = [ 'b', 'c']
>>> print (a)
[0, 1, 2, 'b', 'c', 5, 6, 7, 8, 9]
>>> #替代写法,将起始索引本身的值到终止索引前一个索引之间的值进行替换,
>终止索引本身的数值不替换
(2)给定替换的元素个数 > 2个
// An highlighted block
>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print (a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a [ 3: 5 ] = [ 'b', 'c', 'd', 'e']
>>> print (a)
[0, 1, 2, 'b', 'c', 'd', 'e', 5, 6, 7, 8, 9]
>>> #插入写法,从开始索引为3的地方带入插入值,带入插入数值后,
将索引值为5的值本身及其后面的值紧跟着排列在后就行
(3)给定替换的元素个数 < 2。
// An highlighted block
>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print (a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a [ 3: 5 ] = [ 'b' ]
>>> print (a)
[0, 1, 2, 'b', 5, 6, 7, 8, 9]
>>> # 替换了起始索引 = 3本身的值,
>终止索引=5及其以后的值都紧跟在插入值后面,
>索引=4处的值伴随着索引 = 3的值一起被替换掉了
3、插入元素值
切片操作中,替换元素值与插入元素值的区别常令人困惑。理解替换原理后,插入元素值其实很简单:只要保持终止索引和起始索引为同一个值,再进行赋值即可。
(1)插入一个元素
// An highlighted block
>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print (a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a [6:6 ] = ['c', 'd', 'e', 'f','g']
>>> print (a)
[0, 1, 2, 3, 4, 'b', 'c', 'd', 'e', 'f', 'g', 5, 6, 7, 8, 9]
>>> #插入多个元素,其他原本的元素值和个数都不发生改变
(2)插入多个元素,甚至字符串
// An highlighted block
>>> a = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print (a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a [ 3: 3] = [ 'hello , world!']
>>> print (a)
[0, 1, 2, 'hello , world!', 3, 4, 5, 6, 7, 8, 9]
4、选择切片位置
(1)取索引值为偶数的位置进行切片
// An highlighted block
>>> a = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a [ : : 2]
[0, 2, 4, 6, 8]
>>> # 选取索引值为偶数的位置进行切片
(2)选取索引值为奇数的位置进行切片
// An highlighted block
>>> a = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a [ 1: :2]
[1, 3, 5, 7, 9]
>>> # 选取索引值为奇数的位置进行切片
综上所述,即为今日关于Python切片学习的小结,记录完成!
总结
到此这篇关于Python切片操作方法的文章就介绍到这了,更多相关Python切片操作方法内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









