Python基础-不一样的切片操作

Python切片操作是Python中从列表,字符串等某个序列对象中抽取部分值的情况下使用的方法,首先我们要知道序列对象包括哪些类型。

序列:字符、列表、元组   


  所有序列都支持迭代,序列表示索引为非负整数的有序对象集合,字符和元组属于不可变序列,列表可变。

Python切片操作的一般方式

一个完整的切片表达式包含两个“:”,用于分隔三个参数(start_index、end_index、step),当只有一个“:”时,默认第三个参数step=1。

切片操作基本表达式:object[start_index:end_index:step]

step:正负数均可,其绝对值大小决定了切取数据时的‘‘步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以增量1取值。“切取方向非常重要!

start_index:表示起始索引(包含该索引本身);该参数省略时,表示从对象“端点”开始取值,至于是从“起点”还是从“终点”开始,则由step参数的正负决定,step为正从“起点”开始,为负从“终点”开始。

end_index:表示终止索引(不包含该索引本身);该参数省略时,表示一直取到数据“端点”,至于是到“起点”还是到“终点”,同样由step参数的正负决定,step为正时直到“终点”,为负时直到“起点”。

下面说下实际的使用案例,以列表为例子:

list_slice=['alex','peter','leo','simon']


取单个书

print(list_slice[0])

['alex']


取整个列表

print(list_slice[::])

['alex', 'peter', 'leo', 'simon']


取前三个元素

print(list_slice[0:3])  ##start_index从0开始,左包右不包,就是0,1,2 不包括3

print(list_slice[-4:-1:1])

['alex', 'peter', 'leo']


倒序取数

print(list_slice[0:3:-1]) ##start_index, end_index是0-3,是说从左向右取,但是step=-1是从右到左取,相互矛盾

[]


print(list_slice[::-1])##倒序整个list

print(list_slice[3::-1]) ##倒序整个list

['simon', 'leo', 'peter', 'alex']


print(list_slice[3:0:-1]) ##取后三个元素 start_index=3, end_index=0(但是不包括),左包右不包


print(list_slice[-1:-4:-1]) ##取后三个元素, start_index, end_index可以用负号来表示元素

['simon', 'leo', 'peter']


连续切片

print(list_slice[0:4][0:2]) ##理论上可以无数次切片

['alex', 'peter']


嵌套列表的切片

list_list_slice=['alex','peter',['a','b','c'],'leo','simon']

print(list_list_slice[2][0:2])

['a', 'b']


切片的三个参数可以用表达式,如

a[2+1:3*2:7%3]

[3, 4, 5]

等价于 a[2+1:3*2:7%3] = a[3:6:1]


切片range的案例

for i in range(1,100)[2::3][-10:]: 

       print(i)


就是利用range函数生成1-99的整数,然后取3的倍数,再取最后十个。

用切片来修改list

list_slice[0:2] =['x','y']

print(list_slice)

['x', 'y', 'leo', 'simon']

list_slice[0] =['x','y']

print(list_slice)

[['x', 'y'], 'y', 'leo', 'simon']

字符串,元组的切片操作和列表类似


(一)start_index、end_index、step可同为正、同为负,也可正负混合使用。但必须遵循一个原则,否则无法正确切取到数据:当start_index的位置在end_index的左边时,表示从左往右取值,此时step必须是正数(同样表示从左往右);当start_index的位置在end_index的右边时,表示从右往左取值,此时step必须是负数(同样表示从右往左),即两者的取值顺序必须是相同的。对于特殊情况,当start_index或end_index省略时,起始索引和终止索引由step的正负来决定,不会存在取值方向出现矛盾的情况(即不会返回空列表[]),但正和负取到的结果是完全不同的,因为一个向左一个向右。


(二)在利用切片时,step的正负是必须要考虑的,尤其是当step省略时。比如a[-1:],很容易就误认为是从“终点”开始一直取到“起点”,即a[-1:]= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],但实际上a[-1:]=a[-1]=9,原因在于step=1表示从左往右取值,而起始索引start_index=-1本身就是对象的最右边的元素了,再往右已经没数据了,因此只有a[-1]一个元素。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 列表: 有序的可变的元素集合 定义: 方式1[元素1, 元素2, 元素3...]例如: [1, 2, 3, 4, ...
    伯wen阅读 2,701评论 0 0
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 8,117评论 0 9
  • Python 是一种相当高级的语言,通过 Python 解释器把符合语法的程序代码转换成 CPU 能够执行的机器码...
    Python程序媛阅读 5,927评论 0 3
  • 列表 list 列表是由一系列特定元素组成的,元素和元系之间没有任何关联关系,但他们之间有先后顺序关系 列表是一种...
    遇明不散阅读 2,118评论 0 0
  • 沉默是金: 有些事自己知道就好,没必要去追问,因为答案未必能接受;有些人自己认清就好,不值得去难过,因为感情不能去...
    之心污婆阅读 4,466评论 0 0