目录
序列介绍
- (1)3种基本序列类型:list、tuple、range(数字序列对象)
- (2)专门处理文本的附加序列类型:str
- (3)专门处理二进制数据的附加序列类型: bytes、bytearray、memoryview
一、字符串基础
1.字符串定义
str对象称为 字符串。 字符串采用Unicode 编码,为不可变序列
字符串字面值有多种不同的写法:
- (1)单引号: '允许包含有 "双" 引号' 。例:str='this is string';
- (2)双引号: "允许包含有 '单' 引号"。 例:name="this is 'python' work";
- (3)三重引号: '''三重单引号''' 或 name="""this is 'python' work"""
2.字符串运算
(1)+ 字符串连接
a='Hello'
b='Python'
c=a + b
#c为'HelloPython'
(2)* 重复输出字符串
a * 2
#结果:'HelloHello'
(3)[] 通过索引获取字符串中字符
参考 字符串访问
(4)[:] 截取字符串中的一部分
参考 字符串访问
(5)in 与 not in 成员运算符
"H" in a
"M" not in a
(6)r/R 原始字符串,不进行转义
tab=r'\n'
stu=R'jack\tim'
(7)% 格式化字符串
参考 字符串格式化
3.逻辑与比较运算符
(1)逻辑运算符
- not:逻辑“非”。如果x为True,则not x为False
- and:逻辑“与”。如果x为True,且y为True,则x and y为True
- or:逻辑“或”。如果x、y中至少有一个为True,则x or y为True
(2)比较运算符
- >:大于
- <:小于
- >=:大于等于
- <=:小于等于
- ==:等于。比较两个值是否相等。之所以用两个等号,是为了和变量赋值区分开来。
- !=:不等与
- x is y:x与y是同一对象
- x is not y:x与y不是同一对象
比较规则为:
- (1)0-9A-Za-z1字符中,排序在前边的字符比后面的小
- (2)从第一个字符开始逐个字符比较,若前面的字符相同,则继续比较后面的字符,直接第1对不同的字符比较的结果,后面即使还有字符也不会再作比较
- (3)当一个字符串全部字符和另一个字符串的前部分字符相同时,长度长的字符串为大
例:
a='aba'
b='acb'
a<b #结果:True
4.字符串访问
(1)直接访问字符串中的值, 字符串索引第1位为0
'better man'[4]
(2)使用 变量名[n] 的方式,输出字符变量的单个值
name='better man'
n1=name[0]
(3)采用 字符串[n1:n2] 方法访问连续多个值
name='better man'[7:10]
当为 字符串[0:n2] 形式时,可省略写成 字符串[:n2]形式
name='better man'
n1=name[:3]
(4)循环读取字符串字符
a='abcdefg'
for str in a:print(str)
(5)等距截取
(1)seq[start:end:step] start为起始点,end为结束点,step为距长(即每隔step个字符提取)
(2)seq[:n] 等同 seq[0:n]
(3)seq[n:] 等同 seq[n:len(seq)]
(6)反向截取
(1)seq[-n]表示截取倒数第n个字符
(2)seq[n1:-n2]表示从(n1-1)个字符截取到倒数第n2个字符
例:
s1='STUDENT'
p1=s1[2:-2]
print(p1) #结果:UDE
p2=s1[-2:]
print(p2) #结果:NT
(3)seq[::-1]起到反转字符串的作用
s1='ABC'
p2=s1[::-1]
print(p2) #结果:CBA
5.字符串格式化
字符串具有一种特殊的内置操作:使用 % (取模) 运算符。 这也被称为字符串的 格式化 或 插值 运算符。
1.字符串格式化符号:
- %c 格式化字符及其ASCII码
- %s 格式化字符串
- %r 字符串(使用 repr() 转换任何 Python 对象)
- %a 字符串(使用 ascii() 转换任何 Python 对象)
- %d 格式化整数
- %u 格式化无符号整型
- %o 格式化无符号八进制数
- %x 格式化无符号十六进制数
- %X 格式化无符号十六进制数(大写)
- %f 格式化浮点数字,可指定小数点后的精度
- %F 浮点十进制格式
- %e 用科学计数法格式化浮点数
- %E 作用同%e,用科学计数法格式化浮点数
- %g %f和%e的简写
- %G %f 和 %E 的简写
- %p 用十六进制数格式化变量的地址
2.格式化操作符辅助指令:
- * 定义宽度或者小数点精度
- - 用做左对齐
- + 在正数前面显示加号( + )
- <sp> 在正数前面显示空格
- # 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')
- 0 显示的数字前面填充'0'而不是默认的空格
- % '%%'输出一个单一的'%'
- (var) 映射变量(字典参数)
- m.n. m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)
例:
(1)格式化字符串
print("His name is %s"%("Aviad"))
(2)格式化整数
print("He is %d years old"%(25))
(3)打印浮点数
print ("His height is %f m"%(1.83))
(4)打印浮点数(指定保留小数点位数)
print ("His height is %.2f m"%(1.83))
(5)指定占位符宽度
print ("Name:%10s Age:%8d Height:%8.2f"%("Aviad",25,1.83))
(6)指定占位符宽度(左对齐)
print ("Name:%-10s Age:%-8d Height:%-8.2f"%("Aviad",25,1.83))
(7)指定占位符(只能用0当占位符?)
print ("Name:%-10s Age:%08d Height:%08.2f"%("Aviad",25,1.83))
(8)科学计数法
print('%.2e'%0.00015) #结果:1.50e-04
(9)输出指定位数
import math;
PI = 3.1415926
print("PI = %10.3f" % math.pi) #输出PI = 3.142
print("PI = %-10.3f" % math.pi) #输出PI = 3.142
(10)输出指定长度
print("%.3s" %("abcde")) #输出abc
print("%.*s" %(4,"abcde")) #输出abcd
print("%10.3s" %("abcde")) #输出 abc(总长度为10,字符长度不够前面填空格)
print("%3d %0.2f"%(5,1276.2851)) #输出5 1276.28
6.转义字符
- \(在行尾时) 续行符
- \\ 反斜杠符号
- \' 单引号
- \" 双引号
- \a 响铃 (windows只有在cmd中实现铃声,而python自带ide与pycharm没有铃声)
- \b 退格(Backspace)
- \e 转义
- \000 空
- \n 换行
- \v 纵向制表符
- \t 横向制表符
- \r 回车
- \f 换页
- \oyy 八进制数,yy代表的字符,例如:\o12代表换行
- \xyy 十六进制数,yy代表的字符,例如:\x0a代表换行
- \other 其它的字符以普通格式输出
7.字符串常量
- string.ascii_lowercase 小写字母’abcdefghijklmnopqrstuvwxyz’
- string.ascii_uppercase 大写的字母’ABCDEFGHIJKLMNOPQRSTUVWXYZ’
- string.ascii_letters ascii_lowercase和ascii_uppercase常量的连接串
- string.digits 数字0到9的字符串:’0123456789’
- string.hexdigits 字符串’0123456789abcdefABCDEF’
- string.letters 字符串’abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’
- string.lowercase 小写字母的字符串’abcdefghijklmnopqrstuvwxyz’
- string.octdigits 字符串’01234567’
- string.punctuation 所有标点字符
- string.printable 可打印的字符的字符串。包含数字、字母、标点符号和空格
- string.uppercase 大学字母的字符串’ABCDEFGHIJKLMNOPQRSTUVWXYZ’
- string.whitespace 空白字符 ‘\t\n\x0b\x0c\r ‘
例:
import string
print(string.digits)
#结果:0123456789
8.f-string格式化字符串
从Python 3.6开始,f-string是格式化字符串的新方法,更易读,更简洁,不易出错,而且速度更快!
案例:
name = 'Eric' print(f'Hello, my name is {name}')
#输出 'Hello, my name is Eric'
二、字符串函数
1.字符串函数目录
- [1]capitalize() 将string的第一个字符转换为大写
- [2]lower() string转为小写
- [3]upper() string转换大写
- [4]swapcase() 将字符串中大写转换为小写,小写转换为大写
- [5]title() 返回标题化的字符串,即所有单词都是大写开始,其余字母小写
- [6]center() 返回一个指定宽度的string
- [7]len() 返回字符串长度
- [8]ljust() 返回原字符串指定长度(左对齐),不足则填充,足则返回原字符串
- [9]rjust() 返回原字符串指定长度(右对齐),不足则填充,足则返回原字符串
- [10]zfill() 返回指定长度的字符串,原字符串右对齐,前面填充0,足则返回原字符串
- [11]count() 返回某str在string出现的次数
- [12]max() 返回string中最大的字母。
- [13]min() 返回string中最小的字母。
- [14]decode() 解码string
- [15]encode() 编码string
- [16]startswith() 检查string是否是以某字符串开头
- [17]endswith() 检查string是否以某str结束
- [18]join() 以指定字符串作为分隔符,将 seq 中所有的元素合并为一个新的字符串
- [19]find() 检测str是否包含在string中
- [20]index() 跟find()一样,但找不到会报异常
- [21]rfind() 类似于find()函数,不过是从右边开始查找
- [22]rindex() 类似于index(),不过是从右边开始
- [23]isalnum() 若string至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False
- [24]isalpha() 若string至少有一个字符并且所有字符都是字母则返回True, 否则返回False
- [25]isdigit() 若string只包含数字则返回True否则返回False..
- [26]islower() 若string中所有这些字符都是小写,则返回True,否则返回False
- [27]isnumeric() 若string中只包含数字字符,则返回True,否则返回False
- [28]isspace() 若string中只包含空格,则返回True,否则返回False.
- [29]istitle() 若string是标题化(所有单词以大写开始)则返回True,否则返回False
- [30]isupper() 若string中所有这些字符都是大写,则返回True,否则返回False
- [31]isdecimal() 检查字符串是否只包含十进制字符,返回True或False
- [32]strip() 删除string前后空格
- [33]lstrip() 截掉字符串左边的空格
- [34]rstrip() 删除字符串字符串末尾的空格.
- [35]replace() 替换指定字符串
- [36]expandtabs() 把string中的tab符号转为空格
- [37]split() 用分隔符截取字符串,返回列表
- [38]splitlines() 按照('\r', '\r\n', '\n')进行分隔,返回列表
- [39]maketrans() 创建字符映射的转换表,用translate函数实现映射转换
- [40]translate() 根据maketrans给出的表转换string的字符
2.字符串函数用法
[1]capitalize
# 第一个字符转换为大写
str.capitalize()
[2]lower()
# 将字符串中所有大写字符转为小写
语法:str.lower()
[3]upper()
# 将字符串中所有小写字符转为小写
语法:str.upper()
[4]swapcase()
# 将字符串中大写转换为小写,小写转换为大写
语法:str.swapcase()
[5]title()
字符串标题化,即首字符大写
语法:str.title()
[6]center()
# 方法返回一个指定的宽度 width 居中的字符串,如果 width 小于字符串宽度直接返回字符串,否则使用 fillchar 去填充,默认为空格。
语法:str.center(width[, fillchar])
例:
str = "[www.runoob.com]"
str.center(40, '*')
[7]len()
# 返回字符串长度
语法:len(str)
[8]ljust()
# 返回一个原字符串左对齐,如果 width 小于字符串宽度直接返回字符串,否则使用 fillchar 去填充,默认为空格。
语法:str.ljust(width[, fillchar])
例:
str = "Runoob example....wow!!!"
print (str.ljust(50, '*'))
#结果:Runoob example....wow!!!**************************
[9]rjust()
# 返回一个原字符串右对齐,如果 width 小于字符串宽度直接返回字符串,否则使用 fillchar 去填充,默认为空格。
语法:str.rjust(width[, fillchar])
例:
str = "this is string example....wow!!!"
str.rjust(50, '*')
#结果:**************************Runoob example....wow!!!
[10]zfill()
# 返回指定长度width的字符串,原字符串右对齐,如果字符串长度不足,前面填充0
语法:str.zfill(width)
[11]count()
统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。
语法:str.count(sub, start= 0,end=len(string))
sub -- 搜索的子字符串
start -- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
end -- 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
例:
str="www.runoob.com"
str.count('run',0,10)
[12]max()
返回string中最大的字母
语法:max(str)
[13]min()
返回string中最小的字母
语法:min(str)
[14]decode()
以encoding指定的编码格式解码字符串。默认编码为字符串编码。
注:字符串没有decode属性,字符串先有编码encode,才后有解码decode
语法:str.decode(encoding='UTF-8',errors='strict')
encoding -- 要使用的编码,如"UTF-8"。
errors -- 设置不同错误的处理方案。
'strict'为默认方案,意为编码错误引起一个UnicodeError。
'ignore'忽略其中有异常的编码,仅显示有效的编码
'replace'替换其中异常的编码
其他可能得值有'xmlcharrefreplace', 'backslashreplace' 以及通过 codecs.register_error() 注册的任何值。
常用编码格式:
(1)gb2312 支持简体中文
(2)gbk 支持简体中文及繁体中文,GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准
(3)big5 支持繁体中文
(4)utf-8 万国码,解决国际上字符的一种多字节编码,支持几乎所有字符
例:
str = "this is string example....wow!!!";
str2 = str.encode('utf-8') #以utf-8对str进行编码
str = str2.decode('utf-8') #以utf-8对str进行解码
[15]encode()
以encoding 指定的编码格式编码字符串
语法:str.encode(encoding='UTF-8',errors='strict')
encoding -- 要使用的编码,如"UTF-8"。
errors -- 设置不同错误的处理方案。
'strict'为默认方案,意为编码错误引起一个UnicodeError。
'ignore'忽略其中有异常的编码,仅显示有效的编码
'replace'替换其中异常的编码
其他可能得值有'xmlcharrefreplace', 'backslashreplace' 以及通过 codecs.register_error() 注册的任何值。
常用编码格式:
(1)gb2312 支持简体中文
(2)gbk 支持简体中文及繁体中文,GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准
(3)big5 支持繁体中文
(4)utf-8 万国码,解决国际上字符的一种多字节编码,支持几乎所有字符
例:
u = u'中文'
str = u.encode('gb2312') #以gb2312编码对unicode对像进行编码
str1 = u.encode('gbk') #以gbk编码对unicode对像进行编码
str2 = u.encode('utf-8') #以utf-8编码对unicode对像进行编码
[16]startswith()
检查string是否是以某字符串开头,是则返回 True,否则返回 False
语法:str.startswith(str, beg=0,end=len(string))
str -- 检测的字符串。
strbeg -- 可选参数用于设置字符串检测的起始位置
strend -- 可选参数用于设置字符串检测的结束位置
例:
str = "this is string example....wow!!!"
print(str.startswith('this'))
[17]endswith()
判断字符串是否以指定后缀结尾,是则返回True,否则返回False
语法:str.endswith(suffix[, start[, end]])
suffix -- 该参数可以是一个字符串或者是一个元素
start -- 字符串中的开始位置
end -- 字符中结束位置
例:
Str='Runoob example....wow!!!'
suffix='!!'
print(Str.endswith(suffix))
print(Str.endswith(suffix,20))
[18]join()
将序列中的元素以指定的分隔符连接生成一个新的字符串
注:适用于序列对象:字符串、列表、元组
语法:str.join(sequence)
例:
(1)字符串:
seq='runoob'
res_str='_'.join(seq)
#结果:'r_u_n_o_o_b'
(2)列表
list1=('len','speak','chinese')
res_str='_'.join(list1)
#结果:'len_speak_chinese'
[19]find()
检测字符串中是否包含子字符串str,如果包含子字符串返回开始的索引值,否则返回-1
语法:str.find(str, beg=0, end=len(string))
str -- 指定检索的字符串
beg -- 开始索引,默认为0
end -- 结束索引,默认为字符串的长度
例:
str1 = "Runoob example....wow!!!"
str2 = "exam";
print (str1.find(str2))
print (str1.find(str2, 5))
print (str1.find(str2, 10))
[20]index()
检测字符串中是否包含子字符串str,如果包含子字符串返回开始的索引值,否则报异常
语法:str.index(str, beg=0, end=len(string))
str -- 指定检索的字符串
beg -- 开始索引,默认为0
end -- 结束索引,默认为字符串的长度
例:
str1 = "Runoob example....wow!!!"
str2 = "exam";
print (str1.index(str2))
print (str1.index(str2, 5))
print (str1.index(str2, 10))
[21]rfind()
类似于find()函数,不过是从右边开始查找
语法:str.rfind(str, beg=0 end=len(string))
str -- 指定检索的字符串
beg -- 开始索引,默认为0
end -- 结束索引,默认为字符串的长度
[22]rindex()
类似于index(),不过是从右边开始
语法:str.rindex(str, beg=0 end=len(string))
str -- 指定检索的字符串
beg -- 开始索引,默认为0
end -- 结束索引,默认为字符串的长度
[23]isalnum()
若string至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False
语法:str.isalnum()
[24]isalpha()
若string至少有一个字符并且所有字符都是字母则返回True, 否则返回False
语法:str.isalpha()
[25]isdigit()
若string只包含数字则返回True否则返回False
语法:str.isdigit()
[26]islower()
若string中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回True,否则返回False
语法:str.islower()
[27]isnumeric()
若string中只包含数字字符,则返回True,否则返回False ,这种方法是只针对unicode对象
语法:str.isnumeric()
[28]isspace()
若string中只包含空格,则返回True,否则返回False
语法:str.isspace()
[29]istitle()
若string是标题化(所有单词以大写开始)则返回True,否则返回False
语法:str.istitle()
[30]isupper()
若string中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回True,否则返回False
语法:str.isupper()
[31]isdecimal()
检查字符串是否只包含十进制字符,返回True或False
语法:str.isdecimal()
[32]strip()
删除string头尾指定的字符(默认为空格)
语法:str.strip([chars])
chars -- 移除字符串头尾指定的字符
例:
str = "*****this is string example....wow!!!*****"
print (str.strip( '*' ))
[33]lstrip()
截掉字符串左边的空格或指定字符
语法:str.lstrip([chars])
chars -- 移除字符串头尾指定的字符
例:
str = "88888888this is string example....wow!!!8888888";
print( str.lstrip('8') );
#结果:this is string example....wow!!!8888888
[34]rstrip()
截掉字符串右边的空格或指定字符
语法:str.rstrip([chars])
chars -- 移除字符串头尾指定的字符
[35]replace()
替换指定字符串
语法:str.replace(old, new[, max])
old -- 将被替换的子字符串。
new -- 新字符串,用于替换old子字符串。
max -- 可选字符串, 替换不超过 max 次
例:
str = "this is string example....wow!!!"
print (str.replace("is", "was", 3))
[36]expandtabs() 把string中的tab符号转为空格
把字符串中的 tab 符号('\t')转为空格,tab 符号('\t')默认的空格数是 8
语法:str.expandtabs(tabsize=8)
tabsize -- 指定转换字符串中的 tab 符号('\t')转为空格的字符数
例:
str = "this is\tstring example....wow!!!"
str.expandtabs()
[37]split()
通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串
返回值:列表
语法:str.split(str="_", num=string.count(str))
str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等
num -- 分割次数,省略则为全部
例:
str='len_speak_chinese'
str_list=str.split('_')
[38]splitlines()
按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符
返回值:列表
语法:str.splitlines([keepends])
keepends -- 在输出结果里是否去掉换行符('\r', '\r\n', \n'),默认为 False,不包含换行符,如果为 True,则保留换行符
行边界符:
\n 换行
\r 回车
\r\n 回车 + 换行
\v 或 \x0b 行制表符
\f 或 \x0c 换表单
\x1c 文件分隔符
\x1d 组分隔符
\x1e 记录分隔符
\x85 下一行 (C1 控制码)
\u2028 行分隔符
\u2029 段分隔符
例:
str='ab c\n\nde fg\rkl\r\n'
str_list=str.splitlines(True)
#结果:['ab c\n', '\n', 'de fg\r', 'kl\r\n']
[39]maketrans()
创建字符映射的转换表,用translate函数实现映射转换,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标
注:两个字符串的长度必须相同,为一一对应的关系。
语法:str.maketrans(intab, outtab)
intab -- 字符串中要替代的字符组成的字符串。
outtab -- 相应的映射字符的字符串。
例:参考translate()
[40]translate() 根据maketrans给出的表转换string的字符
根据参数table给出的表(包含 256 个字符)转换字符串的字符, 要过滤掉的字符放到 deletechars 参数中
语法:str.translate(table[, deletechars])
table -- 翻译表,翻译表是通过maketrans方法转换而来。
deletechars -- 字符串中要过滤的字符列表。
例:
intab = "aeiou"
outtab = "12345"
trantab = str.maketrans(intab, outtab)
str = "this is string example....wow!!!"
print (str.translate(trantab))
#结果:th3s 3s str3ng 2x1mpl2....w4w!!!