python切片详解
先从原理上分析切片运算:
list的切片,内部是调用__getitem__,__setitem__,__delitem__和slice函数。而slice函数又是和range()函数相关的。
给切片传递的键是一个特殊的slice对象。该对象拥有可描述所请求切片方位的属性,例如:
|
1
2
3
4
|
a = [ 1, 2, 3, 4, 5, 6 ]x = a [ 1 : 5 ] # x = a.__getitem__( slice ( 1, 5, None ) )a [ 1 : 3 ] = [10, 11, 12 ]# a.__setitem__( slice ( 1, 3, None ), [ 10, 11, 12 ] )del a [ 1 : 4 ]# a.__delitem__( slice ( 1, 4, None ) ) |
Python 的切片功能实际上比很多程序员认为的更强大。
|
1
|
a = m [ 0 : 100 : 10 ] # 带步进的切片(步进值=10) |
注意:步进值为step
当step > 0 时
切片从 start(含start)处开始,到end(不含end)处结束,**从左往右**,每隔(step-1)(索引之间的差仍为step,但相隔的元素是step-1个)个元素进行一次截取。
这时,start 指向的位置应该在end指向的位置的左边,否则返回值为空
当step < 0 时
切片从 start(含start)处开始,到end(不含end)处结束,**从右往左**,每隔(step-1)(索引之间的差仍为step,但相隔的元素是step-1个)个元素进行一次截取。
这时,start 指向的位置应该在end指向的位置的右边,否则返回值为空
有一个经典应用是:翻转字符串
比如:
|
1
2
|
>>> str='pythontab.com'>>> str[::-1] |
结果为:
'moc.batnohtyp'
切片边界问题
实例:
|
1
2
3
4
5
6
|
s=[1,2,3,4] # S 上界为 0 下界为 4s[-100:100] #返回 [1,2,3,4] -100超出了上界,100超出了下界:等价于 s[0:4]s[-100:-200] #返回 [] -100,-200均超出了上界,自动取上界:等价于s[0:0]s[100:200] #返回 [] 100,200均超出了下界,自动取下界值:等价于s[4:4]s[:100] #返回 [1,2,3,4] 开始值省略表示从第0个开始s[0:] #返回 [1,2,3,4] 结束值为空表示到最后一个结束 |
注意:我使用的python版本为python2.7,python的切片存在版本兼容问题。在python3中有更加高级的功能和用法,在使用时一定要注意自己的python版本。
python切片详解的更多相关文章
- Python Collections详解
Python Collections详解 collections模块在内置数据结构(list.tuple.dict.set)的基础上,提供了几个额外的数据结构:ChainMap.Counter.deq ...
- Python数据类型详解——列表
Python数据类型详解--列表 在"Python之基本数据类型概览"一节中,大概介绍了列表的基本用法,本节我们详细学一下列表. 如何定义列表:在[]内以英文里输入法的逗号,,按照 ...
- Python数据类型详解——元组
Python数据类型详解--元组 有时候我们的列表数据不想被别人修改时该怎么办? 此时,就可以使用元组来存放,元祖又称为只读列表,不能修改 定义方式:与列表类似,将列表的[]换成()即可. 特性: 1 ...
- Python闭包详解
Python闭包详解 1 快速预览 以下是一段简单的闭包代码示例: def foo(): m=3 n=5 def bar(): a=4 return m+n+a return bar >> ...
- [转] Python Traceback详解
追莫名其妙的bugs利器-mark- 转自:https://www.jianshu.com/p/a8cb5375171a Python Traceback详解 刚接触Python的时候,简单的 ...
- python 数据类型详解
python数据类型详解 参考网址:http://www.cnblogs.com/linjiqin/p/3608541.html 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8 ...
- Python 递归函数 详解
Python 递归函数 详解 在函数内调用当前函数本身的函数就是递归函数 下面是一个递归函数的实例: 第一次接触递归函数的人,都会被它调用本身而搞得晕头转向,而且看上面的函数调用,得到的结果会 ...
- python线程详解
#线程状态 #线程同步(锁)#多线程的优势在于可以同时运行多个任务,至少感觉起来是这样,但是当线程需要共享数据时,可能存在数据不同步的问题. #threading模块#常用方法:'''threadin ...
- python数据类型详解(全面)
python数据类型详解 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8.字典9.日期 1.字符串1.1.如何在Python中使用字符串a.使用单引号(')用单引号括起来表示字 ...
随机推荐
- 【Spark】Spark性能优化之Whole-stage code generation
一.技术背景 Spark1.x版本中执行SQL语句,使用的是一种最经典,最流行的查询求职策略,该策略主要基于 Volcano Iterator Model(火山迭代模型).一个查询会包含多个Opera ...
- nginx 日志记录 自定义详解(分析上报用)
nginx 日志记录 自定义详解 1.log_format 普通格式 log_format main '$remote_addr - $remote_user [$time_local] $req ...
- memcache类的扩展函数
Memcache — Memcache类 /****连接****/1.Memcache::connect – 创建一个Memcache对象语法:bool Memcache::connect ( str ...
- CI框架视图继承
CI(CodeIgniter)框架 视图继承 这个代码不是我撸的 ... 当时在哪儿找的忘了 ... 如果有侵权什么的 ... 联系我删了 ... 需要去core里面创建一个MY_loader.php ...
- hadoop生态搭建(3节点)-10.spark配置
# https://www.scala-lang.org/download/2.12.4.html# ================================================= ...
- UART学习之路(四)VerilogHDL实现的简单UART,VIVADO下完成仿真
用VerilogHDL实现UART并完成仿真就算是对UART整个技术有了全面的理解,同时也算是Verilog入门了.整个UART分为3部分完成,发送模块(Transmitter),接收模块(Recei ...
- python2.7入门---CGI编程&表单操作&cookie操作
看到标题我们首先有个疑问,什么是CGI?CGI 目前由NCSA维护,NCSA定义CGI为:CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上 ...
- 20145202马超《java》实验四
实验指导:http://www.cnblogs.com/lxm20145215----/p/5444207.html 实验指导:http://www.cnblogs.com/Vivian517/p/6 ...
- BZOJ2761_不重复数字_KEY
题目传送门 Map水过(或set也行). code: /************************************************************** Problem: ...
- spring源码-国际化-3.5
一.国际化在实际代码中是非常常见的一中方式.为了结合web做一下语言上面的切换,而达到展示的目的. 二.这里呢,主要是介绍spring中对于国际化做了哪些处理. 三.实现方式 1)xml配置 < ...