四 字符串
4.1 常识
(1)转义字符
转义字符是 \(反斜杠) + 字符 组成的有特殊意义的符号。\n - 换行; \t - 制表符
\ + 指定符号可以使有特殊含义的符号变成其本身,可以让没有特殊含义的符号变得有特殊意义
str2 = 'abc\t123'
print(str2) #abc 123
print('ab\\tcd') #ab\tcd
(2)就近原则
(例如:表示字符串的’,表示列表的[]等,相邻最近的两个符号会因为就近原则自动的组成一对)
(3)原始字符串
在字符串前加r或者R,能够将原来字符串中有特殊意义的符号转换成本身。
一个转义字符长始终为1,添加了原始字符串的转义字符的长度为2。
print('12\t34') #12 34
print(r'12\t34') #12\t34
print(len(r'\t'),len('\t')) #2 1
(4)字符串性质:
a.有序序列(下标、索引)
b.不可变序列(没有增删改)
(5)切片
字符串的切片和列表一模一样
(6)查找操作:index()、find()
index():
从左向右查找元素,只找元素第一次出现的位置,找到元素后立即停止查找,找不到报错。ValueError: substring not found
可以指定开始查找的位置
s4 = '王者荣耀王室战争'
print(s4.index('王')) #0
print(s4.index('王',1)) #4
index()引申出rindex()
rindex():从右向左查找元素,只找元素第一次出现的位置,找到元素后立即停止查找,找不到报错。ValueError: substring not found
rindex()返回的下标也是正序下标
print(s4.rindex('王')) #4
print(s4.rindex('一')) #报错
find()
和index用法一模一样,区别:找不到元素find()不会报错,返回-1
find()方法也存在一个rfind(),使用方法同上rindex()
print(s4.find('一')) #-1
4.2字符串的运算
1.字符串的拼接(得到新的字符串对象)
print('ab' + 'cd') #abcd
2.字符串的重复
print('*' * 20) #********************
3.字符串比较大小
比较第一对不相同的大小
python使用的编码表是ASCII码表的拓展表Unicode编码表(万国码)
print('ab' >'c') #False
print('ab。' > 'abc') #True
chr() - 能够将进制转换成对应的符号
ord() - 能够将符号转换为十进制
print(ord('。')) #12290
print(ord('c')) #99
print(chr(12290)) #。
0 - 9对应的范围: 48 - 57
A - Z: 65 - 90
a - z: 97 - 122
所有的中文:\u4e00 - \u9fa5
print(chr(ord('\u4e00')),chr(ord('\u9fa5')))
for i in range(19968,40870):
print(chr(i),end='')
4.字符串的成员运算: in 、 not in
print('a' in 'abcd') #True
二进制:0、1
A:二进制:0b01000001,八进制:0o101十进制:65.十六进制:0x41
print(chr(0b01000001),chr(0o101),chr(65),chr(0x41)) #A A A A
hex() - 将进制转换为十六进制
oct() - 将进制转换为八进制
print(hex(65)) #0x41
print(oct(65)) #0o101
4.3字符串的遍历
循环(遍历)
直接遍历
str1 = '王者荣耀'
for i in str1:
print(i)
间接遍历
for i in range(len(str1)):
print(str1[i])
获取‘王荣’
for i in range(0,len(str1),2):
print(str1[i])
练习1:‘abcderf’ -->‘ABCDERF’
str2='abcderf'
str3=''
for i in str2:
str3 += chr(ord(i)-32)
print(str3)
练习2:‘abcdABCD一二三四’ -->‘ABCDabcd一二三四’
str4 = 'abcdABCD一二三四'
str5 =''
for i in str4:
if 'a' <= i <= 'z':
str5 += chr(ord(i)-32)
elif 'A' <= i <= 'Z':
str5 += chr(ord(i)+32)
else:
str5 += i
print(str5)
4.4字符串的方法和函数
upper() - 小写字母转大写字母
print('abcANM'.upper()) #ABCANM
lower() - 大写字母转小写字母
print('abcANM'.lower()) #abcanm
capitalize() - 将字符串所有单词的首字母转大写,必须是以字母开头的字符串
print('df45DFG98UH;/.b'.capitalize()) #Df45dfg98uh;/.b
title() - 将字符串中所有连续英文字母的子串首字母转大写
print('df45DFG98UH;/.b'.title()) #Df45Dfg98Uh;/.B
split() - 切割,以指定符号为切割点,将切割点左右的字符串分开并保存在列表中
result1 = ',1,2,3,'.split(',')
print(result1) #['', '1', '2', '3', '']
print('3' + '' =='3') #True
join() - 将一个所有元素均为字符串的序列(容器)中的所有元素以指定符号拼接起来
result2 = '-'.join(result1)
print(result2) #-1-2-3-
strip() - 默认去掉字符串头尾的空符号(空格、\n、\t等都是空符号),也可以指定去除的符号
str1='\nab \t\n'
print(str1.strip()) #ab
print(str1.strip('\n')) #ab
print('abc*'.strip('*')) #abc
replace(“old_str”,“new_str”) - 替换,将一个字符串中的全部old_str替换成new_str
replace(“old_str”,“new_str”,“次数”) - 将一个字符串中的指定数量的old_str替换成new_str
str =',1,2,3,'
print(str1.replace(',','')) #123
print(str1.replace(',','',2)) #12,3,
练习题:
例如:
"你可真是个垃圾"
python中有一个模块jieba(结巴)
['你','可','真是','个','垃圾']
现存一个词库(停用词):
['垃圾','菜鸡','辣鸡']
如果jieba分词之后的结果在停用词库中出现过,直接进行替换
str1 = '你可真是个垃圾'
list1 = ['你','可','真是','个','垃圾']
stop_words = ['垃圾','菜鸡','辣鸡']
str2=''
for i in list1:
if i in stop_words:
str2 += str1.replace(i,'*'*len(i))
print('屏蔽不文明用语之后的结果:',str2)
#屏蔽不文明用语之后的结果: 你可真是个**