这两天学习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]
''
以上,如有错误或者遗漏,欢迎指正!