python切片操作

一、python的索引方式

以list对象[0,1,2,3,4,5,6,7,8,9]为例:
在这里插入图片描述
可以看到,正索引从0开始,负索引从-1开始。

二、python切片操作方式

一个完整的切片表达式包含两个:,用于分隔三个参数start_index, end_index, step。当只有一个:时,默认第三个参数step=1;当一个:也没有时,start_index=end_index,表示切取start_index指定的那个元素。

基本表达式:

object[start_index:end_index:step]
  • step:正负数均可,其绝对值决定了切取数据时的“步长”,正负号决定了“切确方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1。
  • start_index:表示起始索引(包含该索引对应值)。该参数省略时,表示从对象“端点”开始取值,至于是从“起点”还是“终点”开始,则由step参数的正负决定,step为正表示从起点开始,为负表示从终点开始
  • end_index:表示终止索引(不包含该索引对应值)。该参数省略时,表示一直取到数据“端点”,“端点”同样由step参数的正负决定,step为正时直到“终点”,为负表示直到”起点“

三、python切片操作详细例子

以下示例均以如下的list对象为例:

a=[0,1,2,3,4,5,6,7,8,9]

3.1 切取单个元素

print(a[0])
# 0
print(a[-4])
# 6

3.2 切取完整对象

print(a[:])
# [0,1,2,3,4,5,6,7,8,9]
print(a[::])
# [0,1,2,3,4,5,6,7,8,9]
print(a[::-1])
# [9,8,7,6,5,4,3,2,1,0]

3.3 start_index和end_index全为正(负)的情况

print(a[1:6])
# [1,2,3,4,5]

print(a[1:6:-1])
# []
# 输出为空,因为step=-1决定了从右往左取值
# 但是start_index=1及end_index=6决定了从左往右取值,两者矛盾

print(a[6:2])
# []
# 同样输出为空,因为start_index=6到end_index=2决定了从右往左
# 取值,但是step=1又矛盾,因此为空

print(a[:6])
# [0,1,2,3,4,5]

print(a[:6:-1])
# [9,8,7]

print(a[6:])
# [6,7,8,9]

print(a[6::-1])
# [6,5,4,3,2,1,0]

注意当两者均为负时情况类似

3.4 start_index和end_index正负混合的情况

print(a[1:-6])
# [1,2,3]

print(a[1:-6:-1])
# []

print(a[-1:6])
# []

print(a[-1:6:-1])
# [9,8,7]

3.5 多层切片操作

print(a[:8][2:5][-1:])
# [4]
# 相当于
# a[:8]=[0,1,2,3,4,5,6,7]
# a[:8][2:5]=[2,3,4]
# a[:8][2:5][-1:]=4

理论上可以无限次多层切片操作。

3.6 切片操作的三个参数可以用表达式

print(a[2+1:3*2:7%3])
# [3,4,5]

3.7 其他对象的切片操作

前面的切片操作以list对象为例进行说明,但实际上可进行切片操作的数据类型还有很多,包括元组、字符串等等。

print((0,1,2,3,4,5)[:3])
# (0,1,2) tuple的切片操作

print('ABCDEFG'[::2])
# 'ACEG'

for i in range(1,100)[2::3][-5:]:
	print(i)
# 87
# 99
# 93
# 96
# 99

四、常用切片操作

4.1 取偶数位置

print(a[::2])
# [0,2,4,6,8])

参考

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值