字符串的读取采用下标参数,定义如下:
str【start:end:step】
注意:字符串下标采用左开右闭的原则,也就是说取的字符串是start~(end-1)
1、正常参数的例子
1 >>> str="Hello World"2 >>> str[0:]3 'Hello World'4 >>> str[6:10]5 'Worl'6 >>> str[:5]7 'Hello'8 >>> str[0:10:2]9 'HloWr'
2、如果序列的机尾处超过了原字符串的最后一个索引位置,则采用负数索引。-1指的是最后一个索引位置,-2为倒数第二个位置
字符 | H | e | l | l | o | W | o | r | l | d | |
索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
-11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
1 >>> str[3:-2]2 'lo Wor'3 >>> str[-1]4 'd'5 >>> str[-5:-1]6 'Worl'
3、步长参数默认值为1,当用-1作为步长,意味着从后往前进行
1 >>> str[::2]2 'HloWrd'3 >>> str[::3]4 'HlWl'5 >>> str[::-1]6 'dlroW olleH'7 >>> str[::-2]8 'drWolH'
4、在数字字符串上使用步长,能得到有趣的结果。不同步长和不同起始值,能得到奇数、偶数或者保留数字
1 >>> digits="0123456789" 2 >>> digits[::2] 3 '02468' #偶数 4 >>> digits[1::2] 5 '13579' #奇数 6 >>> digits[::-1] 7 '9876543210' #反转 8 >>> digits[::-2] 9 '97531' #反转后的奇数10 >>> digits[-2::-2]11 '86420' #反转后的偶数
5、更多的扩展:
step
为正,则从左到右切片,如果start > end
,则为空step
为负,则从右到左切片,如果start < end
,则为空start
和end
为空,前者表示最开始,后者表示最后一个, 同时为空的时候,表示取所有。至于方向,取决于step
可以总结一句规律,step 为正表示从左到右切片,反之为右到左。然后根据index
依次切片
1 >>> a=list(i for i in range(1,11)) 2 >>> a 3 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 4 >>> 5 >>> a[8:3:-1] 6 [9, 8, 7, 6, 5] # 右->左切片,step 为1,a[8]=9, a[7]=8, ... a[4]=5, 8-3=5个 7 >>> 8 >>> a[10:0:-2] 9 [10, 8, 6, 4, 2] # 右->左切片, 切片的时候,不存在 index 越界情况,a[10]不存在,a[9]=10, a[7]=8, a[5]=6...10 >>> 11 >>> a[0:10:-2] # start < end step 为负, 方向为右->左,第一个是 a[0], a[0]的左边就再也没有值了。为空12 []13 >>> 14 >>> a[::-2] # a[:]表示取所有,step 为负就反方向从右往左取15 [10, 8, 6, 4, 2]16 >>> 17 >>> a[5::-2] # 右->左,等价于 a[5:0:-2] a[5]=6, a[3]=4, a[1]=218 [6, 4, 2]19 >>> 20 >>> a[:5:-2] # 右->左, 等价于 a[9:5:-2] a[9]=10, a[7]=8 21 [10, 8]
【扩展】
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
1 str1 = "00000003210Runoob01230000000" 2 print(str1.strip('0')) # 去除首尾字符 03 str2 = ", this. "4 str3 = "this,,. "5 print(str2.strip('., '))6 print(str3.strip('., '))
结果为:
1 '3210Runoob0123'2 'this'3 'this'
PS:
lstrip()、rstrip()和strip()类似,只是仅针对字符串开头和结尾