python字符串理解和操作关键点

定义字符串

s = "012345"

索引下标

1.python的下标可以是0、正数、负数;

2.下标0、正数和其它语言一样,0是第一个字符的下标;

>>> print(s[0])
0

>>> print(s[1])

1

3.负数下标在底层实现时,是加上了一个字符串长度,转换为0、正数下标,再来索引的字符;

>>> print(s[-5]) # 下标-5转换为(-5+6) = 1

1

4.如果一个“负数+字符串长度”获得的下标超出了字符串合理的下标范围:

取单个字符的操作会报异常;

>>>s[-16]
Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2023.1.3\plugins\python-ce\helpers\pydev\pydevconsole.py", line 364, in runcode
    coro = func()
           ^^^^^^
  File "<input>", line 1, in <module>
IndexError: string index out of range

截取字符串--不带step

s[start:end]

1.start和end为截取字符串的下标的左值和右值,不管下标是正数还是负数,都符合左闭右开的规则;

>>>s[0:6] 
'012345'

>>>s[-6:-1] # 负数先转换为正数的下标,再从左值-->右值遍历
'01234'

>>>s[-6:0] # (-6+6)-->0遍历,为空字符串
''

>>>s[-6:1] # (-6+6)-->1遍历,遍历到下标0
'0'

2.异常的下标值

>>>s[0:7] # 部分下标在合法范围内,返回有效index索引到的字符串
'012345'

 >>>s[-16:-1] # 部分下标在合法范围内
 '01234'

>>>s[-16:] # 部分下标在合法范围内
'012345'

s[5:2] # 不满足循环遍历条件,返回空
''

>>>s[7:9] # 左右值都越界,不报异常,但下标都不在合法范围,返回空

''

>>>s[9:7] # 左右值都越界,不报异常,但是9-->7遍历时,初始条件就不成立,返回空
''

>>>s[-16:-10] # (-16+6)-->(-10+6)遍历,下标都不在合法范围
''

>>>s[-6:-16] (-6+6)-->(-16+6)遍历,不满足循环条件
 ''

截取字符串--带step

s[start:end:step]

1.start和end为截取字符串的下标的左值和右值,不管下标是正数还是负数,都符合左闭右开的规则;

2.step是截取的步长,按照start、start+step、start+step+step······来索引字符,得到的index需要小于end值

>>>s[::1] # start、end为缺省值,start为最小值0、end为最大值6;也可以理解为遍历全部
'012345'

>>>s[0:5:1] #注意左闭右开
'01234'
>>>s[0:6:1]
'012345'

>>>s[::2]
'024'

>>>s[1:5:2]
'13'
>>>s[1:6:2] #注意左闭右开
'135'

3.step可以是负数,step为负数时不再是用第二点中的start、start+step、start+step+step······规则来算下标,而是将字符串翻转过来

>>>s[::-1] # start、end为缺省值,start为最大值-1、end为最小值-7;也可以理解为遍历全部
'543210'
>>>s[::-2]
'531'

注意,当step为负数时,且start、end不是缺省值,start要比end值大,否则,会返回空字符串。

>>>s[1:6:-1]
''
>>>s[-6:-1:-1]
''

正确写法:

>>>s[-1:-7:-1]
'543210'

>>>s[-1:-6:-1] # 右开原则,index -6 (-6+6=0)娶不到
'54321'

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值