前面我们见过书写字符串的一种特殊方式,即直接将两个字符串紧挨着写在一起,这样的话 Python 就会自动拼接它们,比如说:
s1='Hello,''World' print(s1) #Hello,World
还有一种方式是使用 "+"的方式,比较简单
s1='Hello,'+ 'World' print(s1)
#Hello,World
还有使用字符串拼接数字,因为Python不允许直接拼接,所以要将数字转换成字符串
s1 = "这是数字: " p = 99.8 #字符串直接拼接数值,程序报错 print(s1 + p) #使用str()将数值转换成字符串 print(s1 + str(p)) #使用repr()将数值转换成字符串 print(s1 + repr(p))
str() 和 repr() 函数都可以将数字转换成字符串,其中 str 是 Python 内置的类型(和 int、float 一样),而 repr() 则只是一个函数。此外,repr 还有一个功能,它会以 Python 表达式的形式来表示值
st = "I will play my fife" print (st) print(repr(st))
I will play my fife 'I will play my fife'
通过上面的输出结果可以看出,如果直接使用 print() 函数输出字符串,将只能看到字符串的内容,没有引号;但如果先使用 repr() 函数对字符串进行处理,然后再使用 print() 执行输出,将可以看到带引号的字符串,这就是 Python 字符串的表达式形式
截取字符串(字符串切片)
字符串本质上就是由多个字符组成的,Python 允许通过索引来操作字符,比如获取指定索引处的字符,获取指定字符在字符串中的位置等。
string[index]
这里的 string 表示要截取的字符串,index 表示索引值。Python 规定,字符串中第一个字符的索引为 0、第二个字符的索引为 1,后面各字符依此类推。此外,Python 也允许从后面开始计算索引,最后一个字符的索引为 -1,倒数第二个字符的索引为 -2。
str2=' www.iqi.com 123 34' print(str2[3])#w print(str2[-2])#3
除可获取单个字符之外,Python 也可以在方括号中使用范围来获取字符串的中间“一段”(被称为子串),其基本语法格式为:
string[start : end : step]
此格式中,各参数的含义如下:
string:要截取的字符串;
start:表示要截取的第一个字符所在的索引(截取时包含该字符)。如果不指定,默认为 0,也就是从字符串的开头截取;
end:表示要截取的最后一个字符所在的索引(截取时不包含该字符)。如果不指定,默认为字符串的长度;
step:指的是从 start 索引处的字符开始,每 step 个距离获取一个字符,直至 end 索引出的字符。step 默认值为 1,当省略该值时,最后一个冒号也可以省略。
str2=' www.iqi.com 123 34' print(str2[3:9:2])#wii print(str2[-6::2])#133 print(str2[:-3])# www.iqi.com 123
# 获取s中从索引5处到结束的子串 print(s[5: ]) # 获取s中从倒数第6个字符到结束的子串 print(s[-6: ]) # 获取s中从开始到索引5处的子串 print(s[: 5]) # 获取s中从开始到倒数第6个字符的子串 print(s[: -6])
此外,Python 字符串还支持用 in 运算符判断是否包含某个子串。例如如下代码:
print('iqi' in str2) #True print('iqi12' in str2) #False
还可使用全局内置的 min() 和 max() 函数获取字符串中最小字符和最大字符。例如如下代码:
print(min(str2)) #最小值空格 print(max(str2))#最大值 w
分割字符串 split( )方法
split() 方法可以实现将一个字符串按照指定的分隔符切分成多个子串,这些子串会被保存到列表中(不包含分隔符),作为方法的返回值反馈回来。该方法的基本语法格式如下:
str.split(sep,maxsplit)
此方法中各部分参数的含义分别是:
str:表示要进行分割的字符串;
sep:用于指定分隔符,可以包含多个字符。此参数默认为 None,表示所有空字符,包括空格、换行符“\n”、制表符“\t”等。
maxsplit:可选参数,用于指定分割的次数,最后列表中子串的个数最多为 maxsplit+1。如果不指定或者指定为 -1,则表示分割次数没有限制。
在 split 方法中,如果不指定 sep 参数,那么也不能指定 maxsplit 参数。
str2=' www.iqi.com.123 34 @163' print(str2.split())#采用默认分隔符空格分割 ['www.iqi.com.123', '34', '@163'] print(str2.split(' ',2))#采用默认分隔符分割两次 ['', 'www.iqi.com.123', '34 @163'] print(str2.split('.'))#采用.分隔符 [' www', 'iqi', 'com', '123 34 @163'] print(str2.split('.',2))#采用.分隔符分割两次 [' www', 'iqi', 'com.123 34 @163']
join()方法:合并字符串
join() 方法也是非常重要的字符串方法,它是 split() 方法的逆方法,用来将列表(或元组)中包含的多个字符串连接成一个字符串。
使用 join() 方法合并字符串时,它会将列表(或元组)中多个字符串采用固定的分隔符连接在一起。
newstr = str.join(iterable)
此方法中各参数的含义如下:
newstr:表示合并后生成的新字符串;
str:用于指定合并时的分隔符;
iterable:做合并操作的源字符串数据,允许以列表、元组等形式提供
newstr='.'.join(("1","2","3")) print(newstr) print(type(newstr))
1.2.3
<class 'str'>
count()方法:统计字符串出现的次数
count 方法用于检索指定字符串在另一字符串中出现的次数,如果检索的字符串不存在,则返回 0,否则返回出现的次数。
count 方法的语法格式如下:
str.count(sub[,start[,end]])
此方法中,各参数的具体含义如下:
str:表示原字符串;
sub:表示要检索的字符串;
start:指定检索的起始位置,也就是从什么位置开始检测。如果不指定,默认从头开始检索;
end:指定检索的终止位置,如果不指定,则表示一直检索到结尾。
str2=' www.iqi.com.123 34 @163' print(str2.count(' '))#打印空格数量 3
find()方法:检测字符串中是否包含某子串
find() 方法用于检索字符串中是否包含目标字符串,如果包含,则返回第一次出现该字符串的索引;反之,则返回 -1。
find() 方法的语法格式如下:
str.find(sub[,start[,end]])
此格式中各参数的含义如下:
str:表示原字符串;
sub:表示要检索的目标字符串;
start:表示开始检索的起始位置。如果不指定,则默认从头开始检索;
end:表示结束检索的结束位置。如果不指定,则默认一直检索到结尾。
str2=' www.iqi.com.123 34 @163' print(str2.find('.'))#索引为4 print(str2.find(' '))#索引为 0 print(str2.find('iqi',2,-6))#索引为 5 print(str2.find(' ',3,30))#索引为 16 print(str2.find('54')) #没找到返回-1
注意,Python还提供了 rfind() 方法,与 find() 方法最大的不同在于,rfind() 是从字符串右边开始检索。例如:
str2=' www.iqi.com.123 34 @163' print(str2.rfind('.'))#索引为12
index()方法:检测字符串中是否包含某子串
同 find() 方法类似,index() 方法也可以用于检索是否包含指定的字符串,不同之处在于,当指定的字符串不存在时,index() 方法会抛出异常。
index() 方法的语法格式如下:
str.index(sub[,start[,end]])
此格式中各参数的含义分别是:
str:表示原字符串;
sub:表示要检索的子字符串;
start:表示检索开始的起始位置,如果不指定,默认从头开始检索;
end:表示检索的结束位置,如果不指定,默认一直检索到结尾。
str2=' www.iqi.com.123 34 @163' print(str2.index('.'))# 4 print(str2.index('.',5,-6))# 8 print(str2.index('.',5,20))# 8
同 find() 和 rfind() 一样,字符串变量还具有 rindex() 方法,其作用和 index() 方法类似,不同之处在于它是从右边开始检索,例如:
str2=' www.iqi.com.123 34 @163' print(str2.rindex('.'))# 12
去除字符串中空格(删除指定字符)的3种方法
用户输入数据时,很有可能会无意中输入多余的空格,或者在一些场景中,字符串前后不允许出现空格和特殊字符,此时就需要去除字符串中的空格和特殊字符。
这里的特殊字符,指的是制表符(\t)、回车符(\r)、换行符(\n)等。
Python中,字符串变量提供了 3 种方法来删除字符串中多余的空格和特殊字符,它们分别是:
strip():删除字符串前后(左右两侧)的空格或特殊字符。
lstrip():删除字符串前面(左边)的空格或特殊字符。
rstrip():删除字符串后面(右边)的空格或特殊字符。
注意,Python 的 str 是不可变的(不可变的意思是指,字符串一旦形成,它所包含的字符序列就不能发生任何改变),因此这三个方法只是返回字符串前面或后面空白被删除之后的副本,并不会改变字符串本身。
Python strip()方法
strip() 方法用于删除字符串左右两个的空格和特殊字符,该方法的语法格式为:
str.strip([chars])
其中,str 表示原字符串,[chars] 用来指定要删除的字符,可以同时指定多个,如果不手动指定,则默认会删除空格以及制表符、回车符、换行符等特殊字符。
str2=" www.iqi.com.123 123@\n\t" print(str2.strip("\n")) # " www.iqi.com.123 123@" print(str2.lstrip()) # "www.iqi.com.123 123@" print(str2.rstrip()) # " www.iqi.com.123 123@"