在撸代码中,我们经常会遇到需要对list或者str类型的对象进行取值操作,如果是只取某一个值,那难不倒大家,直接list[i] (i为索引下标)就好了,但如果要取某一部分的数据,这该咋整???
来来来,走过路过,千万不要错过,语法糖之切片了解一下?经鉴定,这语法糖符合真香定律~~~
举个栗子:
有个 list1 = [1, 2, 3, 4, 5, 6] 要得到[2, 4, 6] 咋整?其他语言多数是通过循环取值后再赋值的方式实现的(那些后来悄咪咪加了切片概念的语法请绕道~~~如:"卷王"java中Arrays里面增加的copyOfRange(被切片的数组, begin_index, end_index),又或者C# 9 版本默默添加的切片等)
python语法自带了一个很香的语法糖——切片!上题只需要一步就搞定了!
当然,题做出来不是最重要的,重要的是理解下切片是个什么东东~~~
切片的标准表达式为 object[start_index:end_index:step] 且遵循左闭右开原则(即:start_index为闭区间,end_index为开区间)
start_index :开始取值的位置,可空,默认为索引 0(即数据起点)
end_index :结束取值的位置,可空,默认为索引 len(obj)(即数据终点)
step :步长,可空,默认为1,正数表示取值方向为从左往右,负数则表示取值方向为从右往左
数据的取值方向非常重要!
数据的取值方向非常重要!
数据的取值方向非常重要!
起点 | 终点 | |||||
list1 | 1 | 2 | 3 | 4 | 5 | 6 |
正索引 | 0 | 1 | 2 | 3 | 4 | 5 |
负索引 | -6 | -5 | -4 | -3 | -2 | -1 |
取值方向: | ||||||
step为正数:从左往右→→→ | ||||||
step为负数:←←←从右往左 |
正向的切片还是比较好理解的,网上教程N多,我就不在锦上添花了,只想把最难理解的反向切片拎出来做个记录——
还是举个栗子:
list1 = [1, 2, 3, 4, 5, 6]
print(list1[1:-6:-1])的结果为[2]
这个结果怎么来的呢?分布化解——
第一步:list1[1::-1] 结果为:[2, 1] —— 表示从索引为1的地方开始,从右往左取值
第二步:list1[:-6:-1] 结果为:[6, 5, 4, 3, 2] —— 表示从右往左取值,直到-6位置结束,但不包含-6位置对应的value [1]
第三步:list1[1:-6:-1] 结果为:[2] —— 表示把第一步和第二步的结果求交集,得到公共值[2]
基本思路就是这样,如果还有不理解的,自己写个测试函数,多练几遍就懂啦!
最后在感慨下:这语法糖真的甜~~~!!!