一、String字符串
1.概念
字符串就是由若干个字符组成的有限序列
字符:字母,数字,特殊符号,中文
表示形式:采用的单引号或者双引号
注意:字符串属于不可变实体
2.创建字符串
代码演示:
str1 = "hello" str2 = 'hello' str3 = 'h' #Python不支持单字符类型,单字符在Python中也是一个字符串
3.字符串运算
代码演示:
#字符串的运算 #1.字符串连接【拼接】 :+ #注意:+只能用于字符串和字符串之间的拼接 s1 = "welcome " s2 = "to china" print(s1 + s2) print(s1) print(s2) #2.重复输出字符串 :* s3 = "good" print(s3 * 3) print(s3,s3,s3) #注意:不管是+还是*,运算结束之后都是生成了一个新的字符串 #3.获取字符串中的某个字符 #和list以及tuple类似,通过索引的方式访问字符串中的字符 #访问方式:字符串名[索引] s4 = "ahjfahdgjag" #获取值 print(s4[2]) #获取一个字符串 的长度 print(len(s4)) #遍历字符串:类似于list和tuple的遍历 for c in s4: print(c) for i in range(len(s4)): print(s4[i]) for i,c in enumerate(s4): print(i,c) #字符串的本质:在底层维护了一个由不同的字符组成的元组 ('a','h','j'....) #s4[2] = 'o' #TypeError: 'str' object does not support item assignment #4.截取字符串【切片】 str1 = "hello world" #截取指定范围的字符串【子字符串】 包头不包尾的操作 print(str1[6:11]) #从开头截取到指定位置 print(str1[:11]) #从指定位置截取到末尾 print(str1[6:]) str2 = "abc123456" print(str2[2:5]) #c12 print(str2[2:]) #c123456 print(str2[2::2]) #[start:end:step] c246 print(str2[::-1]) #step为正数,则从左向右获取,如果未负数,则从右向左获取 654321cba print(str2[-3:-1]) #45 #5.判断一个字符串中是否包含指定字符:成员运算符 str3 = "you are a good man" print("good" in str3) print("good" not in str3)
4.格式化字符串
通过%来改变后面字母的含义,%被称为占位符
%s:字符串【对象】
%d:整型
%f:浮点型,可以指定小数点后的位数【精度】
代码演示:
print("hello") num = 10 str1 = "hello" print(num,str1) print("num = ",num,"str1 = ",str1) #格式化 print("%d + %s" %(num,str1)) f = 12.34545 print("num = %d,str1 = %s,f = %f"%(num,str1,f)) print("num = %d,str1 = %s,f = %.2f"%(num,str1,f)) #注意:%.nf,如果n省略,则表示取整,如果n>=1,则表示保留小数点后n位,会进行四舍五入的操作
5.转义字符
通过\改变后面字母的含义
\t:相当于按下tab键
\n:换行符
代码演示:
#打印反斜杠\ str1 = "\\" print(str1) #打印单引号 str2 = "'" print(str2) str2 = '\'' #打印"hello" print("\"hello\"") str3 = "hi\thello" print(str3) str4 = "hi\nhello" print(str4) #如果字符串内部有很多的换行,用\n写在一行里面不好阅读 str5 = "today\nis\na\ngood\nday" print(str5) #简化 str6 = """today is a good day """ print(str6) #C:\Users\Administrator\Desktop\XA-Python1804\Day6\视频 str7 = "C:\\Users\\Administrator\\Desktop\\XA-Python1804\\Day6\\视频" print(str7) #为了简化,Python允许使用r"xxxxx',表示字符串内部的字符默认不需要手动转义 str8 = r"C:\Users\Administrator\Desktop\XA-Python1804\Day6\视频" print(str8)
6.字符串功能
代码演示:
#1.字符串和整数之间的转换 #int() str() #eval(str):将str转换为有效的表达式,参与运算,并返回运算结果 num1 = eval("123") print(num1) print(type(num1)) print(int("123")) print(eval("+123")) print(int("+123")) print(eval("-123")) print(int("-123")) print(eval("12+3")) #print(int("12+3")) #ValueError: invalid literal for int() with base 10: '12+3' print(eval("12-3")) #print(int("12-3")) #ValueError: invalid literal for int() with base 10: '12-3' #总结;eval():转换为数学运算 int():转换为整数 #2.统计子字符串在原字符串中出现的次数:count #count(str[,start,end]) str1 = "good good good" c = str1.count("good") print(c) #3.大小写字母转换 #lower():将字符串中的大写字母转换为小写字母 str2 = "Tomorrow is Better" newStr1 = str2.lower() print(newStr1) print(str2) #upper():将小写字母转换为大写 print(str2.upper()) #swapcase():将大写转换为小写,将小写转换为大写 print(str2.swapcase()) #capitalize(): 首个单词的首字母大写,其他全部小写 print(str2.capitalize()) #title():每个单词的首字母大写 print(str2.title())
7.常用功能
7.1填充
代码演示:
#填充【了解】 #center(width[,fillchar]):返回一个指定宽度的居中字符串,width是填充之后整个字符串的长度, # fillchar是需要被填充的字符串,默认为空格 #char---->character字符 str1 = "hello" print(str1.center(20)) print(str1.center(20,"*")) #print(str1.center(20,"abc")) #TypeError: The fill character must be exactly one character long #注意:使用了center功能之后,生成了一个新的字符串,原字符串出现在中间,两边使用指定的字符进行填充 #注意:fillchar必须只有一个字符 #ljust(width[,fillchar]) 返回一个指定宽度的字符串,将原字符串居左对齐,width是填充之后整个字符串的长度, #l:left print(str1.ljust(20,"%")) #rjust(width[,fillchar]) 返回一个指定宽度的字符串,将原字符串居右对齐,width是填充之后整个字符串的长度, #r:right print(str1.rjust(20,"%")) #zfill(width)返回一个指定宽度的字符串,将原字符串居右对齐,width使用0填充 print(str1.zfill(20))
7.2查找
代码演示:
#查找【掌握】 str2 = "abcdefgh123hello" #find(str[,start,end]) :从左到右依次检测,str是否在原字符串中,如果存在,则返回位置 #特点:如果查找到,返回的是子字符串的第一个字符在原字符串中的下标;如果查找不到则返回-1 print(str2.find("hello")) #11 print(str2.find("e")) #4 print(str2.find("yyy")) #-1 print(str2.find("h",3,10)) #注意:如果子字符串在原字符串中出现多次,则只返回第一次查找到的下标 #rfind() :类似于find,只是从右往左检测 print(str2.rfind("hello")) #11 print(str2.rfind("e")) #12 #index():和find的用法基本相同,唯一的区别:find如果查找不到返回-1,但是index则直接报错 print(str2.index("hello")) #11 #print(str2.index("yyy")) #ValueError: substring not found #rindex() #max() :返回原字符串中的最大字母 #使用格式:max或者min(str) print(max(str2)) #min():返回原字符串中的最小字母 print(min(str2))
7.3提取
代码演示:
#提取: #strip(str) :使用str作为条件提取字符串,需要注意:只能去除两端的指定字符【trim】 str1 = "*****today is ******** a good day******" print(str1.strip("*")) #lstrip() :去除左边的指定字符串 print(str1.lstrip("*")) #rstrip():去除右边的指定字符串 print(str1.rstrip("*"))
7.4分割和合并
代码演示:
#分割和合并【掌握】:正则表达式 #split(str[,num]);使用指定字符串分割原字符串,返回一个列表【字符串转换为列表】 str1 = "today is a good day" print(str1.split(" ")) #['today', 'is', 'a', 'good', 'day'] str2 = "hello" #print(str1.split("")) #ValueError: empty separator #注意:使用split功能的时候,其中的分割字符串不能为空 #num表示分割符出现的次数 print(str1.split(" ",2)) #sliptlines(flag) 按照换行符【\n,\r,\r\n】分割,结果为列表 #falg可写可不写,False:忽略换行符,True:则表示保留换行符 s1 = """today is a good day """ print(s1.splitlines(True)) #['today\n', 'is\n', 'a\n', 'good\n', 'day\n'] print(s1.splitlines(False)) #['today', 'is', 'a', 'good', 'day'] #join(list);将原字符串作为连接符号,将列表中的元素连接起来,结果为一个字符串【列表转换为字符串】 str3 = "-" list1 = ["zhangsan","lisi","jack"] str4 = str3.join(list1) print(str4)
7.5替换
代码演示:
#替换【掌握】 #replace(old,new[,max]):将原字符串中的old字符串替换为new的字符串,如果指定了max,则替换的次数不超过max次 str1 = "today is a good day" #需求:将其中的good替换为bad #注意:替换之后仍然是生成了一个新的字符串 print(str1.replace("good","bad")) print(str1) str2 = "today is a good good good day" #注意:max:从左到右检测,只替换指定个数的字符串 print(str2.replace("good","bad",2)) #replaceAll()
7.6判断
代码演示:
#判断 #注意:全部返回的结果为布尔值 #isalpha():如果字符串至少有一个字符并且所有的字符都是字母的话,则返回True print("".isalpha()) print("abc".isalpha()) print("abc123".isalpha()) print("~~~~~~~") #isalnum():如果字符串至少有一个字符并且所有的字符是字母或者数字的话,则返回true print("".isalnum()) print("abc".isalnum()) print("abc123".isalnum()) print("~~~~~~~") #isupper():如果字符串中至少包含一个区分大小写的字符,并且所有的字符都是大写,则返回True print("abc".isupper()) print("123".isupper()) print("aBc".isupper()) print("ABC".isupper()) #True #islower() print("~~~~~~~") #istitle():如果字符串中的单词是标题化的,则返回True print("this is a test".istitle()) print("This is a test".istitle()) print("This Is A Test".istitle()) #True print("~~~~~~~") #isdigit()【掌握】:判断字符串中是否只包含数字,则返回True print("abc123".isdigit()) print("abc".isdigit()) print("123".isdigit()) #结合int("123") int("123abc")使用 print("~~~~~~~") #isnumeric():判断字符串中中是否只包含数字字符,则返回True print("abc123".isnumeric()) print("abc".isnumeric()) print("123".isnumeric()) print("~~~~~~~") #isdecimal():判断字符串中是否只包含十进制,则返回True print("2434".isdecimal()) print("454e4".isdecimal()) print("~~~~~~~") #isspace();判断字符串中是否只包含空格,则返回True print("abc 43".isspace()) print(" ".isspace()) #True
7.7前缀和后缀
代码演示:
前缀和后缀【掌握】 #结果为布尔值 #startswith(str[,beg=0,end=len(string)]) #判断原字符串是否是以指定子字符串开头的,如果beg和end指定值,则表示在指定的范围内判断 str1 = "helloghjshgj" print(str1.startswith("hello")) #endswith(str[,beg=0,end=len(string)]) print(str1.endswith("gj"))
7.8编解码
代码演示:
#字符串的编码和解码 #https://www.baidu.com/s?wd=%E5%8D%83%E9%94%8B&rsv_spt=1&rsv_iqid=0xdae3d65100023b6c&issp=1&f=8 #encode():将字符串转换为字节类型的过程 str2 = "hello 中文" print(str2.encode()) print(str2.encode("utf-8")) print(str2.encode("gbk")) byte11 = str2.encode("gbk") print(type(byte11)) #decode() :将字节类型转换为字符串的过程 print(byte11.decode("gbk"))
7.9ASCII码转换
代码演示:
#ASCII码转换 #ord():获取字符的整数表示 print(ord("A")) print(ord("a")) #chr():把编码转换为对应的字符 print(chr(65)) print(chr(97)) #需求:将hello转换为大写输出 s1 = "hello" s2 = "" for i in range(len(s1)): num = ord(s1[i]) num -= 32 ch = chr(num) print(ch) s2 += ch print(s2)
7.10字符串映射
代码演示:
#字符串的映射【ASCII码】 #maketrans(str1,str2):创建字符映射的转换表 #str1表示需要被转换的字符串,str2需要 转换的目标 t = str.maketrans("ac","68") print(t) #{97: 54, 99: 56} #translate(table) s3 = "hello abc" print(s3.translate(t)) #hello 6b8
归纳: 字符串格式化符号含义
符号 | 说明 |
%c | 格式化字符及其 ASCII 码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同 %e,用科学计数法格式化浮点数 |
%g | 根据值的大小决定使用 %f 或 %e |
%G | 作用同 %g,根据值的大小决定使用 %f 或者 %E |
格式化操作符辅助命令
符号 | 说明 |
m.n | m 是显示的最小总宽度,n 是小数点后的位数 |
- | 用于左对齐 |
+ | 在正数前面显示加号(+) |
# | 在八进制数前面显示 '0o',在十六进制数前面显示 '0x' 或 '0X' |
0 | 显示的数字前面填充 '0' 取代空格 |
Python 的转义字符及其含义
符号 | 说明 |
\' | 单引号 |
\" | 双引号 |
\a | 发出系统响铃声 |
\b | 退格符 |
\n | 换行符 |
\t | 横向制表符(TAB) |
\v | 纵向制表符 |
\r | 回车符 |
\f | 换页符 |
\o | 八进制数代表的字符 |
\x | 十六进制数代表的字符 |
\0 | 表示一个空字符 |
\\ | 反斜杠 |
归纳:字符串格式化符号含义引用于https://fishc.com.cn/forum.php?mod=viewthread&tid=92997&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403