Python-字符串【str】
1、简介
一个个字符组成的有序的序列,是字符的集合
使用单引号、双引号、三引号引住的字符序列
字符串是不可变对象,是字面常量
Python3起,字符串都是Unicode类型
2、初始化
s1 = 'string' s2 = "string2" s3 = '''this's a "String" ''' s4 = 'hello \n magedu.com' s5 = r"hello \n magedu.com" s6 = 'c:\windows\nt' s7 = R"c:\windows\nt" s8 = 'c:\windows\\nt' name = 'tom'; age = 20 # python代码写在一行,使用分号隔开,不推荐 s9 = f'{name}, {age}' # 3.6支持f前缀 sql = """select * from user where name='tom' """ # r前缀:所有字符都是本来的意思,没有转义 # f前缀:3.6开始,使用变量插值
3、索引
3.1、简介
字符串是序列,支持下标访问。但不可变,不可以修改元素。
3.2、示例
sql = "select * from user where name='tom'" print(sql[4]) # 字符串'c' sql[4] = 'o' # 不可以
4、字符串连接
4.1、+加号
将2个字符串连接起来
返回一个新的字符串
4.2、join方法
4.2.1、语法
sep.join(iterable)
使用指定字符串作为分隔符,将可迭代对象中字符串使用这个分隔符拼接起来
可迭代对象必须是字符串
返回一个新的字符串
4.2.2、示例
x = 'ab' x = x + 'cd' print(','.join(x)) print('\t'.join(x)) print('\n'.join(x)) print('-'.join(range(5))) # 报错,不可以的
5、字符查找
5.1、find
5.1.1、语法
find(sub[, start[, end]]) -> int
在指定的区间[start, end),从左至右,查找子串sub
找到返回正索引,没找到返回-1
5.1.2、示例
s = 'testedu.edu' print(s.find('edu')) print(s.find('edu', 3)) print(s.find('edu', 4)) print(s.find('edu', 6, 9)) print(s.find('edu', 7, 20)) print(s.find('edu', 200))
5.2、rfind
5.2.1、语法
rfind(sub[, start[, end]]) -> int
在指定的区间[start, end),从右至左,查找子串sub
找到返回正索引,没找到返回-1
5.2.2、示例
s = 'testedu.edu' print(s.rfind('edu')) print(s.rfind('edu', 3)) print(s.rfind('edu', 4)) print(s.rfind('edu', 6, 9)) print(s.rfind('edu', 7, 20)) print(s.rfind('edu', 200))
5.3、index
5.3.1、语法
index(sub[, start[, end]]) -> int
在指定的区间[start, end),从左至右,查找子串sub
找到返回正索引,没找到抛出异常ValueError
5.3.2、示例
s = 'testedu.edu' print(s.index('edu')) print(s.index('edu', 3)) print(s.index('edu', 4)) #print(s.index('edu', 6, 9)) # 抛异常 print(s.index('edu', 7, 20)) #print(s.index('edu', 200)) # 抛异常
5.4、rindex
5.4.1、语法
rindex(sub[, start[, end]]) -> int
在指定的区间[start, end),从左至右,查找子串sub
找到返回正索引,没找到抛出异常ValueError
5.4.2、示例
s = 'testedu.edu' print(s.rindex('edu')) print(s.rindex('edu', 3)) print(s.rindex('edu', 4)) #print(s.rindex('edu', 6, 9)) # 抛异常 print(s.rindex('edu', 7, 20)) #print(s.rindex('edu', 200)) # 抛异常
5.5、count
5.5.1、语法
count(sub[, start[, end]]) -> int
在指定的区间[start, end),从左至右,统计子串sub出现的次数
5.5.2、示例
s = 'testedu.edu' print(s.count('edu')) print(s.count('edu', 4))
5.6、len
len(string)
返回字符串的长度,即字符的个数
5.7、时间复杂度总结
find、index和count方法都是O(n)
随着字符串数据规模的增大,而效率下降
6、分割
6.1、split
split(sep=None, maxsplit=-1) -> list of strings 从左至右 sep 指定分割字符串,缺省的情况下空白字符串作为分隔符 maxsplit 指定分割的次数,-1 表示遍历整个字符串 立即返回列表 s = ','.join('abcd') print(s.split(',')) print(s.split()) print(s.split(',', 2))
6.2、rsplit
rsplit(sep=None, maxsplit=-1) -> list of strings 从右向左开始切,但是输出的字符串字符不会反 sep 指定分割字符串,缺省的情况下空白字符串作为分隔符 maxsplit 指定分割的次数,-1 表示遍历整个字符串
立即返回列表
6.3、splitlines
splitlines([keepends]) -> list of strings 按照行来切分字符串 keepends 指的是是否保留行分隔符 行分隔符包括\n、\r\n、\r等 s1 = '\na b \tc\nd\n' # 注意下面3个切割的区别 print(s1.split()) print(s1.split(' ')) print(s1.split('\n')) print(s1.split('b')) print(s1.splitlines())
6.4、partition
partition(sep) -> (head, sep, tail) 从左至右,遇到分隔符就把字符串分割成两部分,返回头、分隔符、尾三部分的三元组 如果没有找到分隔符,就返回头、2个空元素的三元组 sep 分割字符串,必须指定 s = ','.join('abcd') print(s.partition(',')) print(s.partition('.')) # ('a', ',', 'b,c,d') # ('a,b,c,d', '', '')
6.5、rpartition
rpartition(sep) -> (head, sep, tail) 从右至左,遇到分隔符就把字符串分割成两部分,返回头、分隔符、尾三部分的三元组 如果没有找到分隔符,就返回2个空元素和尾的三元组 s = ','.join('abcd') print(s.rpartition(',')) print(s.rpartition('.'))
7、替换
7.1、语法
replace(old, new[, count]) -> str
字符串中找到匹配替换为新子串,返回新字符串
count表示替换几次,不指定就是全部替换
7.2、示例
s = ','.join('abcd') print(s.replace(',', ' ')) print(s.replace(',', ' ', 2)) s1 = 'www.testedu.edu' print(s1.replace('w', 'a')) print(s1.replace('ww', 'a')) print(s1.replace('ww', 'w')) # 返回什么? print(s1.replace('www', 'a'))
8、移除【strip、rstrip、lstrip】
8.1、语法
strip([chars]) -> str 在字符串两端去除指定的字符集chars中的所有字符 如果chars没有指定,去除两端的空白字符 lstrip([chars]) -> str ,从左开始 rstrip([chars]) -> str,从右开始
8.2、示例
s = '\t\r\na b c,d\ne\n\t' print(s.strip()) print('-' * 30) print(s.strip('\t\n')) print('-' * 30) print(s.strip('\t\ne\r'))
9、首尾判断【endswith、startswith】
9.1、语法
endswith(suffix[, start[, end]]) -> bool 在指定的区间[start, end),字符串是否是suffix结尾
startswith(prefix[, start[, end]]) -> bool 在指定的区间[start, end),字符串是否是prefix开头
9.2、示例
s = "www.testedu.edu" print(s.startswith('ww')) print(s.startswith('e', 7)) print(s.startswith('e', 10)) print(s.startswith('edu', 11)) print(s.endswith('edu'))
10、其它函数
upper()大写 lower()小写 swapcase() 交换大小写 isalnum() -> bool 是否是字母和数字组成 isalpha() 是否是字母 isdecimal() 是否只包含十进制数字 isdigit() 是否全部数字(0~9) isidentifier() 是不是字母和下划线开头,其他都是字母、数字、下划线 islower() 是否都是小写 isupper() 是否全部大写 isspace() 是否只包含空白字符 其他格式打印函数中文几乎不用,大家自行查看帮助
11、格式化
11.1、C风格printf-style
11.1.1、语法
占位符:使用%和格式字符,例如%s、%d 修饰符:在占位符中还可以插入修饰符,例如%03d format % values format是格式字符串,values是被格式的值 格式字符串和被格式的值之间使用% values只能是一个对象,可以是一个值,可以是一个元素个数和占位符数目相等的元组,也可以是一个字典
11.1.2、示例
"I am %03d" % (20,) 'I like %s.' % 'Python' "%3.2f%% 0x%x %#X" % (89.7654, 10, 256) # 宽度为3,小数点后2位 "I am %-5d" % (20,) "%(host)s.%(domain)s" % {'domain':'testedu.com', 'host':'www'} # 靠名字对应
11.2、format函数
11.2.1、语法
Python2.5之后,字符串类型提供了format函数,功能更加强大,鼓励使用。 "{} {xxx}".format(*args, **kwargs) -> str args是可变的位置参数 kwargs是可变关键字参数,写作a=100 使用花括号作为占位符 {}表示按照顺序匹配位置参数,{n}表示取位置参数索引为n的值 {xxx}表示在关键字参数中搜索名称一致的 {{}} 表示打印花括号
11.2.2、示例
# 位置对应 "{}:{}".format('127.0.0.1', 8080) # 位置或关键字对应 "{server} {1}:{0}".format(8080, '127.0.0.1', server='Web Server Info: ') # 访问元素 "{0[0]}.{0[1]}".format(('testedu', 'com')) # 进制 "{0:d} {0:b} {0:o} {0:x} {0:#X}".format(31) # 浮点数 print("{}".format(3**0.5)) # 1.7320508075688772 print("{:f}".format(3**0.5)) # 1.732051,精度默认6 print("{:10f}".format(3**0.5)) # 右对齐,宽度10 print("{:2}".format(102.231)) # 宽度为2数字 print("{:2}".format(1)) # 宽度为2数字 print("{:.2}".format(3**0.5)) # 1.7 2个数字 print("{:.2f}".format(3**0.5)) # 1.73 小数点后2位 print("{:3.2f}".format(3**0.5)) # 1.73 宽度为3,小数点后2位 print("{:20.3f}".format(0.2745)) # 0.275 print("{:3.3%}".format(1/3)) # 33.333% # 注意宽度可以被撑破 # 对齐 print("{}*{}={}".format(5, 6, 5*6)) print("{}*{}={:2}".format(5, 6, 5*6)) print("{1}*{0}={2:3}".format(5, 6, 5*6)) print("{1}*{0}={2:0>3}".format(5, 6, 5*6)) print("{}*{}={:#<3}".format(4, 5, 20)) print("{:#^7}".format('*' * 3))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码