Python3之切片及内置切片函数slice
切片
取一个list或tuple的部分元素是非常常见的操作。比如,一个list
1 | L = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] |
取前3个元素,应该怎么做
笨方法,一个个列出来
1 2 | >>> [L[ 0 ],L[ 1 ],L[ 2 ]] [ 0 , 1 , 2 ] |
假如需要列出N个但是N很大
循环方法
1 2 3 4 5 6 7 | >>> r = [] >>> n = 3 >>> for i in range (n): ... r.append(L[i]) ... >>> r [ 0 , 1 , 2 ] |
对于经常去指定索引范围的操作,用循环十分繁琐,因此pythone提供了切片操作符能大大简化操作
1 2 | >>> L[ 0 : 3 ] [ 0 , 1 , 2 ] |
L[0:3]表示,从索引0开始,直到索引3,但是不包含索引3,及索引0,1,2 一共3个元素
如果第一个索引为0可以省略
1 2 | >>> L[: 3 ] [ 0 , 1 , 2 ] |
也可以从索引1开始,取出2个元素来
1 2 | >>> L[ 1 : 3 ] [ 1 , 2 ] |
类似也可以倒数切片,-1代表倒数第1个索引
1 2 3 4 | >>> L[ - 2 :] [ 8 , 9 ] >>> L[ - 2 : - 1 ] [ 8 ] |
默认取的间隔是1也可以定义,隔几个去一个
从索引0取到索引9没隔两个取一个
1 2 | >>> L[ 0 : 10 : 2 ] [ 0 , 2 , 4 , 6 , 8 ] |
什么都不写,只写[:]就可以原样复制一个list
1 2 | >>> L[:] [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] |
tuple也是一个list,唯一区别是tuple不可变.tuple切片也是一个tuple
1 2 | >>> ( 0 , 1 , 2 , 3 , 4 , 5 )[: 3 ] ( 0 , 1 , 2 ) |
字符串'xxx'也是可以看成是一种list,也可以切片返回的是一个字符
1 2 | >>> 'abcde' [: 3 ] 'abc' |
切片函数slice
语法
1 2 | class slice (stop) class slice (start, stop[, step]) |
参数说明
1 2 3 | start - - 起始位置 默认为 None stop - - 结束位置 自定义 step - - 间距 默认为 None 间距为 1 |
1 2 3 4 5 6 7 8 9 10 11 | >>> myslice = slice ( 3 ) >>> myslice slice ( None , 3 , None ) >>> L[myslice] [ 0 , 1 , 2 ] >>> print (myslice.start) None >>> print (myslice.step) None >>> print (myslice.stop) 3 |
以上
1 2 3 | myslice = ( 3 ) 等价于 myslice = slice ( 0 , 3 , 1 ) |
自定义间隔step
1 2 3 4 5 6 7 | #切片范围为0-10 间距为2 >>> myslice = slice ( 0 , 10 , 2 ) #查看参数 >>> myslice slice ( 0 , 10 , 2 ) >>> L[myslice] [ 0 , 2 , 4 , 6 , 8 ] |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!