Python字符串操作
一、索引
序列中的所有元素都可以通过索引(下标)来获取,从左往右,第一个元素的索引为0,第二个为1,依此类推到最后一位。索引还可以取负值,从右往左,最后一个元素的索引为-1,倒数第二个为-2,依此类推到左侧第一位。
例如,创建一个字符串:str = “Python”,其索引如下表。
字符 | P | y | t | h | o | n |
---|---|---|---|---|---|---|
索引(正) | 0 | 1 | 2 | 3 | 4 | 5 |
索引(负) | -6 | -5 | -4 | -3 | -2 | -1 |
假设需要获取字符串变量str中的第三个字符”t“,具体代码如下:
str = 'Python'
print(str[2]) # 正数索引获取方式
print(str[-4]) # 负数索引获取方式
二、分片
分片与索引类似,都可以获取序列中的元素,区别是索引只能获取单个元素,而分片可以获取一定范围内的元素。
分片通过冒号隔开的两个索引来实现,其语法是:
slice[start: end: step]
其中slice表示字符序列,start表示起始索引,end表示结束索引(不包含结束位本身),step表示步长,(默认为1,不能为0)。
例如,创建序列:strs = “abcdefg”,使用分片获取元素的几种情况如下表。
分片方式 | 描述 | 结果 |
---|---|---|
strs[1:] | 获取strs中从索引1开始到最后一个元素之间的所有元素 | ‘bcdefg’ |
strs[: 3] | 获取strs中从索引0到索引3之间的所有元素 | ‘abc’ |
strs[1: 3] | 获取strs中索引1到索引3之间的所有元素 | ‘bc’ |
strs[: -1] | 获取strs中从索引0开始到最后一个元素之间的所有元素 | ‘abcdef’ |
strs[-3:] | 获取strs中的最后三个元素 | ‘efg’ |
strs[-3: -1] | 获取strs中从索引-3开始到最后一个元素之间的所有元素 | ‘ef’ |
strs[:] | 获取strs中的所有元素 | ‘abcdefg’ |
strs[0: 7: 2] | 将步长设置为2,获取strs从开始到结束的元素 | ‘aceg’ |
strs[-1: -8: -1] | 步长为负数,分片索引的开始点必须大于结束点,分片从右往左提取元素 | ‘gfedcba’ |
strs[:: -1] | 从strs中从右往左提取所有元素(可用来字符串逆序) | ‘gfedcba’ |
三、字符串加法、乘法,获取长度、最大值和最小值
>>>'Hello' + 'world' + '!' # 字符串相加
'Hello world!'
>>>'Hello' * 3 # 使用数字n乘一个字符串,原字符串会被重复n次
'HelloHelloHello'
>>>len('abcde') # 获取字符串的长度
5
>>>max('123') # 获取序列中ASCII码最大的元素
3
>>>min('123') # 获取序列中ASCII码最小的元素
1
四、字符串方法
1、find()方法
find()方法用于在一个较长的字符串中查找子串。如果找到子串,返回子串所在位置的最左端索引,如果没有找到则返回-1,其语法格式如下:
str.find(sub[, start[, end]])
其中,str表示被查找字符串,sub表示查找的子串,start表示开始索引,省略时默认为0,end表示结束索引,省略时默认为字符串长度。
例:查找子串”like“是否在字符串new_str中。
new_str = "I like learning Python"
a = new_str.find("like")
b = new_str.find("like", 5, 15)
print(a, b)
# 运行结果为:2 -1
【提示】用于查找子串的另一个常用方法是index()方法,该方法与find()方法的用法基本一致,区别在于当查找的子串不存在是,index()方法会抛出异常。
2、count()方法
count()方法用于统计字符串里某个子串出现的次数。该函数返回子串在字符串中出现的次数。其语法格式如下:
str.count(sub[, start[, end]])
其中,str表示被查找字符串,sub表示要统计的子串,start表示开始索引,省略时默认为0,end表示结束索引,省略时默认为字符串长度。
例:使用count()方法查找new_str中出现is的次数。
new_str = "This is a Python book!"
a = new_str.count("is")
b = new_str.count("is", 1, 6)
print(a, b)
# 运行结果为:2 1
3、split()方法
split()方法以指定的字符为分隔符,从字符串左端开始将其分隔成多个字符串,并返回包含分隔结果的列表。其语法格式如下:
str.split([delimiter, num])
其中,str表示被分隔的字符串,delimiter表示分隔符,省略时默认为空字符,包括空格、换行(\n)、制表符(\t)、等,num表示分隔次数,省略时默认全部分隔。
例:使用split()方法分隔new_str字符串
new_str = "This is an example of cutting"
a = new_str.split()
b = new_str.split("", 3)
print(a)
print(b)
# 运行结果为:
# ['This', 'is', 'an', 'example', 'of', 'cutting']
# ['This', 'is', 'an', 'example of cutting']
4、join()方法
join()方法用于将序列中的元素以指定的字符连接,生成一个新的字符串。其语法格式如下:
str.join(sequence)
其中,str表示连接符,可以为空;sequence表示要连接的元素序列。
例:使用join()方法将new_str字符串中的字符用“-”连接,代码如下。
new_str = "This is a Python book!"
print("-".join(new_str))
# 运行结果为:T-h-i-s- -i-s- -a- -P-y-t-h-o-n- -b-o-o-k-!
5、replace()方法
replace()方法用于字符串中的字符替换。其语法格式如下:
str.replce(old, new[, max])
其中,str表示被查找的字符串,old表示被替换的子串,new表示要替换成的新字符串,max是可选参数,表示替换次数不超过max次,省略时默认替换所有。
例:使用replace()方法把new_str中的”day“替换成”DAY“,代码如下。
new_str = "Monday Tuesday Wednesday Thursday Friday Saturday Sunday"
print(new_str.replace("day", "DAY"))
print(new_str.replace("day", "DAY", 3))
# 运行结果为:
# 'MonDAY TuesDAY WednesDAY ThursDAY FriDAY SaturDAY SunDAY'
# 'MonDAY TuesDAY WednesDAY Thursday Friday Saturday Sunday'
6、strip()方法
strip()方法用于删除字符串两端的空白字符或指定字符。其语法格式如下:
str.strip([chars])
其中,str表示字符串,chars表示移除字符串两端指定的字符,省略时默认为空格。
例:使用strip()方法去掉new_str中的字符”0“和”1“。
new_str = "110This is an example0001"
print(new_str.strip("1")) # 移除new_str两侧的1
print(new_str.strip("01")) # 移除new_str两侧的0和1
# 运行结果为:
# '0This is an example000'
# 'This is an example'
7、lower()方法和upper()方法
lower()方法用于将字符串中的所有大写字母转化为小写,而upper()方法则用于转化字符串中所有的小写字符转化为大写。其语法格式如下:
str.lower()
str.upper()
其中,str表示要转化的字符串。
例:使用lower()方法将new_str中的大写字母转化为小写,使用upper()方法将new_str中的小写字母转化为大写:
new_str = "This is an EXAMPLE"
print(new_str.lower())
print(new_str.upper())
# 运行结果为:
# 'this is an example'
# 'THIS IS AN EXAMPLE'
8、isalnum()方法
isalnum()方法用于检测字符串是否由字母和数字、或两种之间的一种组成。如果是就返回True,否则返回False。其语法格式如下:
str.isalnum()
其中,str表示要检测的字符串。
例:使用isalnum()方法判断new_str是否由字符串或数字组成。
new_str = "example8888"
print(new_str.isalnum())
# 运行结果为:True