字符串的通用序列操作
序列是一块用来存放多个值的连续内存空间。Python中常用的序列结构有:字符串、列表、元组等。
所有序列类型都可以进行某些操作,这些操作被称为通用序列操作。这些操作包括:索引、分片、加、乘以及检查某个元素是否属于序列的成员。除此之外,还有计算序列长度、找出最大元素和最小元素等。
字符串,由字符组成的序列。
索引
序列中的所有元素都可以索引(下标)来访问,从左往右,第一个元素的索引为0,第二个为1,依此类推到最后一位。索引还可以取负值,从右往左,最后一个元素的索引为-1,倒数第二个为-2,依此类推。
访问格式为:变量名[索引]
。
str = 'python'
print(str[0])
print(str[-1])
最后得到的结果是:
p
n
上述代码定义了一个变量str,里面存放了一个字符串python
。str[0],也就是访问下标为0的元素,即p
。str[-1],访问索引为-1的元素,即n
。
分片
-
分片与索引类似,都可以获得序列中的元素,区别是索引只能获取单个元素,而分片可以获得一定范围内的元素。
-
分片通过冒号隔开的两个索引来实现,其语法是:
-
slice[start:end:step]
-
其中,slice表示序列,start表示起始索引,end表示结束索引(不包含结束位本身),step表示步长(默认为1,不能为0)。
假设str = 'abcdefg',下面描述分片获取元素的几种情况:
分片方式 | 描述 | 结果 |
---|---|---|
strs[1:] | 获取strs中从索引为1开始到最后一个的所有元素 | 'bcdefg' |
strs[:3] | 获取strs中从索引0到索引3(不包含索引为3的元素)之间所有元素 | 'abc' |
strs[1:3] | 获取strs中从索引1到索引3(不包含索引为3的元素)之间所有元素 | 'bc' |
strs[:-1] | 获取strs中从索引0开始到最后一个元素(不包含最后一个元素)之间的所有元素 | 'abcdef' |
strs[-3:-1] | 获取strs中从索引-3开始到最后一个元素(不包含最后一个元素)的所有元素 | 'ef' |
strs[-3:] | 获取strs中最后三个元素 | 'efg' |
strs[:] | 获取strs中所有元素 | 'abcdefg' |
tips(提示):
1.省略“start”起始索引,表示从序列中的第一个元素开始。
2.省略“end”结束索引,表示到序列的最后一个元素结束。
- 省略开始和结束索引,代表的是所有元素,如果步长设置为2,那么就会访问所有元素中每隔两个步长得到的元素。
strs = 'abcdefg'
print(strs[::2])
上述代码得到的结果为'aceg'
。
- python中规定步长不能设置为0,但可以设置为负数。当步长为负数时,分片索引的开始点必须大于结束点,即分片从右往左提取元素。
strs = 'abcdefg'
print(strs[7:0:-1])
print(strs[-1:-8:-1])
print(strs[::-1])
上述代码得到的结果是:
'gfedcb'
'gfedcba'
'gfedcba'
注意:上述代码需要注意观察start索引和end索引为正和为负两种情况!
序列相加
序列可以使用加法操作进行连接。
'Hello,' + 'World' # 字符串序列连接
结果:Hello,World
[1,2,3] + [4,5,6] # 列表序列连接
结果:[1,2,3,4,5,6]
tips:只有两种相同类型的序列才能进行连接操作!
乘法
使用数字n乘以一个序列会生成新的序列,在新的序列中,原来的序列将被重复n次。
strs = 'hello' * 3
结果:hellohellohello
tips:当输入连续相同的字符时,可使用序列的乘法运算进行实现。
长度、最小值和最大值
序列有3个非常好用的内建函数:len()、min()、max()函数。其参数都为序列名,其中len()函数返回序列中所包含元素的个数;min()函数和max()函数则分别返回序列中最小和最大的元素。
strs = [0,1,2,3]
print(len(strs))
print(min(strs))
print(max(strs))
结果:
4
0
3
tips:通用序列操作还包括成员运算符“in”和“not in”。
# in和not in是用来判断一个元素是否在某个序列中,如:字符串、列表、元组等。
x in y # 在y中找到x的值返回True,否则返回False
x not in y # 在y中未找到x的值返回True,否则返回False