如何理解python字符串切片及其原理

这两天学习python字符串切片,对于python字符串截取的顺序、输出方向和索引编号的规则的理解比较模糊!特意研究了一下总结规则并记录!

基本概念

1.python字符串里面的每一个字符元素都有一个索引编号 !

2.索引编号有两种表示法
2-1.顺序索引, 从起始元素到结尾元素. 起始元素索引为0, 每个元素索引编号+1, 直到末尾元素(索引编号最大)
2-2.逆序索引, 从末尾元素到起始元素. 末尾元素索引为-1, 每个元素索引编号-1, 直到起始元素 (索引编号最小)

例如有一个字符串:

 str = '123456789abcdef'
1.要获得str的某一个字符元素

写法为 str[i]
i 代表元素的索引编号
顺序取法, str[0] 表示 '1', str[1] 表示'2', 以此类推, str[14]表示'f'
逆序取法, str[-1] 表示'f', str[-2]表示'e', 以此类推, str[-15]表示'1'
两种取法可以互相转化

str[0] 和 str[-15] 都可以表示’1’

>>> str[0] == str[-15]
True

str[14] 和 str[-1] 都可以表示‘f’

>>> str[14] == str[-1]
True
2.要获得str内的一段字符

写法

str[begin:end:step]

begin是开始的索引号
end是结束的下一个索引号
step是两次输出的步长, 数值为正,则往末尾元素方向检索, 数值为负,则往起始方向检索,默认不写为1
:是参数分隔符号

begin为0 或者 end为末尾元素, 则可以不写

运行原理

python先判断begin和end的相对位置.

1.如果begin比end靠近起始并且step规定往结尾方向检索,此时满足截取条件
python先定位到begin的字符,然后根据步step指定的长度, 进行下一个元素的检索, 直到碰见end的停下来, 把end前面到begin之间的所有元素按照检索获得的顺序输出(先获得的放在左边)
举例

>>> str[4:10]
'56789a'
>>> str[-5:-2]
'bcd'
>>> str[-6:15]
'abcdef'
>>> str[4:-8]
'567'

2.如果begin比end靠近结尾并且step规定往结尾方向检索,因为无法碰到end,截取条件不成立,返回空字符串
举例

>>> str[9:4]
''
>>> str[-3:-10]
''
>>> str[15:-6]
''
>>> str[-3:4]
''

3.如果begin比end靠近结尾并且step规定往起始方向检索(step为负数), 此时满足截取条件
python先定位到begin的字符,然后根据步step指定的长度, 进行下一个元素的检索, 直到碰见end的停下来, 把end前面到begin之间的所有元素按照检索获得的顺序输出(先获得的放在左边)
举例

>>> str[-3:4:-1]
'dcba9876'
>>> str[15:-6:-1]
'fedcb'
>>> str[-3:-10:-1]
'dcba987'
>>> str[9:4:-1]
'a9876'

4.如果begin比end靠近起始并且step规定往起始方向检索(step为负数),因为无法碰到end,截取条件不成立,返回空字符串
举例

>>> str[4:10:-1]
''
>>> str[-5:-2:-1]
''
>>> str[-6:15:-1]
''
>>> str[4:-8:-1]
''

特殊情况

如果 begin和end索引位置重合, 因为python规定end是不会被包含进结果的, 而此时end又等于begin, 所以begin也不会被包含进结果, 故返回空字符串
举例

>>> str[1:1]
''
>>> str[-3:-3]
''
>>> str[0:-15]
''

以上,如有错误或者遗漏,欢迎指正!

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值