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))
复制代码

 

posted @   小粉优化大师  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示