编辑
2026-04-01
undefined
00

目录

字符串函数
startswith()
结果为:True
isdecimal()
可判断汉字数字,结果为:True
strip()
结果为:23 abcisspace判断字符串是否是一个由空格组成的字符串。
大小写转换
replace()
结果为:456abc
translate()
split()
['123', 'abc', '456']
join()
结果为:123|abc|456早期Python,使用字符串拼接符+=,会生成新的字符串对象,因此不推荐使用+来拼接字符串。推荐使用join函数,因为join函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。
encode()
find()
指定搜索的起点和终点 4find找不到元素,会返回-1。index找不到元素,会导致程序报错。
center()
结果为:--------编程
zfill()
结果为:00000000编程
removeprefix()
www.baidu.com
字符串格式化
插值格式字符串
π 'π' '\u03c0'
%
百分比
format()
结果为:名字是:张三,年龄是:18
基本转换
填充与对齐
str和repr
长字符串、原始字符串
驻留机制

Python 3字符串默认是16位Unicode编码,使用ord()可将字符串转成对应的Unicode码,使用chr()可将十进制数转成对应字符。

字符串函数

startswith()

v = 'abcdefg' result = v.startswith('ab') # 是否以ab开头,返回布尔值 result1 = v.endswith('g') # 是否以g结尾,返回布尔值 print(result) # 结果为:True print(result) # 结果为:True

isdecimal()

v = 'a' v1 = '1' v2 = 'u00b2' v3 = '一千' print(v.isdecimal()) # 是否为十进制数(整数),结果为:False print(v1.isdecimal()) # 结果为:True print(v2.isdigit()) # 结果为:True print(v3.isnumeric()) # 可判断汉字数字,结果为:True

strip()

v = ' 123 abc ' result = v.strip() # 去除字符串两边的空格、换行符、制表符 print(result) # 结果为:123 abclstrip()去除左边空白,rstrip()去除右边空白。 v = 'a123 abca' result = v.strip('a1') # 去除字符串两边指定的内容 print(result) # 结果为:23 abcisspace判断字符串是否是一个由空格组成的字符串。

大小写转换

upper()变大写,变小写为lower() v = '123abc' result = v.upper() print(result) # 结果为:123ABC将字符串转换为词首大写: >>> s = 'I love python!' >>> s.title() 'I Love Python!'swapcase()对字符串的大小写字母进行转换,即将大写字母转换为小写字母,小写字母转换为大写字母。

capitalize()把字符串的第一个字符大写。

istitle判断字符串是否是一个标题类型。isupper、islower判断字符串中的字母是否都是大/小写。

replace()

v = '123abc' result = v.replace('123', '456') # 字符串内容替换 print(result) # 结果为:456abc

translate()

这个方法的优势在于能够同时替换多个字符,因此效率比replace高。

使用translate前须先创建一个转换表,指出不同Unicode码点之间的转换关系。要创建转换表,可用字符串类型str调用方法maketrans。

table = str.maketrans('cs', 'kz') >>> s = 'this is an incredible test' >>> s.translate(table) 'thiz iz an inkredible tezt'

调用方法maketrans时,还有可选的第三个参数,指定要将哪些字母删除:

table = str.maketrans('cs', 'kz', ' ') >>> s.translate(table) 'thizizaninkredibletezt'

split()

v = '123|abc|456' result = v.split('|') # 字符串切割,返回列表 print(result) # ['123', 'abc', '456']

result = v.split('|', 1) # 指定切割几次,返回列表 print(result) # 结果为:['123', 'abc|456']

v = '123|abc|456' result = v.rsplit('|', 1) # 从右向左切割,返回列表 print(result) # 结果为:['123|abc', '456']

s = "hello|world" print(s.partition("|"))  # ('hello', '|', 'world')

partition()按分隔符切分字符串,返回一个包含三个成员的元组:(part_before, sep, part_after),分别代表分隔符前内容、分隔符以及分隔符后内容。

join()

v = ['123', 'abc', '456'] result = '|'.join(v) # 字符串拼接 print(result) # 结果为:123|abc|456早期Python,使用字符串拼接符+=,会生成新的字符串对象,因此不推荐使用+来拼接字符串。推荐使用join函数,因为join函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。

但是,在2.2版本之后,Python专门针对它做了性能优化,大大提升了其执行效率。如今,使用+=拼接字符串基本已经和join()一样快了。

encode()

v = '编程' # Unicode,字符串类型 result = v.encode('utf-8') # utf-8,字节类型 result2 = v.encode('gbk') # gbk,字节类型 print(result) # 结果为:b'xe7xbcx96xe7xa8x8b' print(result2) # 结果为:b'xb1xe0xb3xcc'

v2 = result2.decode('gbk') print(v2) # 结果为:编程

find()

在字符串中查找子串。如果找到,返回索引,否则返回-1。 >>> s = 'I Love Python!' >>> s.find('ve') 4 >>> s.find('i') -1 >>> s.find('ve', 5) # 指定搜索的起点 -1 >>> s.find('ve', 1, 6) # 指定搜索的起点和终点 4find找不到元素,会返回-1。index找不到元素,会导致程序报错。

center()

v = '编程' result = v.center(10, '-') # 字符串内容居中显示 result2 = v.ljust(10, '-') # 居左 result3 = v.rjust(10, '-') # 居右 print(result) # 结果为:----编程---- print(result2) # 结果为:编程-------- print(result3) # 结果为:--------编程

zfill()

v = '编程' result = v.zfill(10) # 填充0 print(result) # 结果为:00000000编程

removeprefix()

从字符串中删除前缀,removesuffix()剔除字符串的后缀。 s = "https://www.baidu.com/" s2 = s.removeprefix("https://") print(s2)  # www.baidu.com/ s3 = s2.removesuffix("/") print(s3)  # www.baidu.com

字符串格式化

插值格式字符串

插值格式字符串(interpolated format string,简称f-string),是Python 3.6添加的新特性。如果使用Python 3.6或更高版本,请使用f-string。

{}内冒号右侧所采用的那套规则,也可以用到f-string里面。

name = "李小龙" age = 18 height = 1.666 formatted = f"我叫{name},明年 {age + 1 =} 岁,身高 {height:.2f} 米。" print(formatted)  # 我叫李小龙,明年 age + 1 = 19 岁,身高 1.67 米。 # 要在f-string中包含大括号字符,可以使用额外的大括号来转义它 print(f"我叫{{name}}")  # 我叫{name} pi = "π" print(f"{pi!s} {pi!r} {pi!a}") # π 'π' '\u03c0'

通过!符号把值转化成Unicode及(s、r和a,str、repr和ascii)形式的字符串。

也可以把f-string写成多行的形式:

peoples = [("张三", 2), ("李四", 25), ("王五", 300)] for i, (item, count) in enumerate(peoples): print(f"#{i+1}:" f"{item[0]:<2s} = " f"{count:>4d}") """ #1:张  =    2 #2:李  =   25 #3:王  =  300 """

Python表达式也可以出现在格式说明符中:

places = 2 number = 3.14159 print(f"My nunmer is {number:.{places}f}")

进制转换:

t1 = f"我今年 {18} 岁" print(t1)  # 我今年 18 岁 t2 = f"我今年 {18:#b} 岁" print(t2)  # 我今年 0b10010 岁 t3 = f"我今年 {18:#o} 岁" print(t3)  # 我今年 0o22 岁 t4 = f"我今年 {18:#x} 岁" print(t4)  # 我今年 0x12 岁

在日常编码中,推荐优先使用f-string,搭配str.format作为补充,想必能满足绝大多数的字符串格式化需求。

%

Python常见的数据类型占位:

  • %s:字符串占位
  • %d:整数占位
  • %f:浮点型占位

可以使用辅助符号“m.n”来控制数据的宽度和精度。 name = "李小龙" age = 18 height = 1.666 text = "我叫%s,今年%4d岁,身高%3.2f" % (name, age, height) print(text)  # 结果为:我叫李小龙,今年  18岁,身高1.67

百分比

%%输出% text = '%s,我已经下载99%%了' %'李小龙' print(text) # 李小龙,我已经下载99%了

format()

a = "名字是:{0},年龄是:{1}" >>> a.format('张三', 18) '名字是:张三,年龄是:18'

b = "名字是:{name},年龄是:{age}" b.format(age = 18, name = '张三') '名字是:张三,年龄是:18'

c = "姓名:{name},年龄:{1},性别:{sex}, 爱好:{0}" c.format(666, 2, name='张三', sex='男') '姓名:张三,年龄:2,性别:男, 爱好:666'

在使用format字符串格式化时,也可以这样操作:s1 = "名字是:{},年龄是:{}".format(*['张三', 18]) print(s1) # 结果为:名字是:张三,年龄是:18 s2 = "名字是:{name},年龄是:{age}".format(**{'name':'张三', 'age':18}) print(s2) # 结果为:名字是:张三,年龄是:18

要在最终结果中包含花括号,可在格式字符串中使用两个花括号(即{{或}})来指定。

s = "名字是:{{0}},年龄是:{{1}}".format() print(s) # 结果为:名字是:{0},年龄是:{1}

基本转换

print("{pi!s} {pi!r} {pi!a}".format(pi="π")) π 'π' 'u03c0'三个标志(s、r和a)指定分别使用str、repr和ascii进行转换。函数str通常创建外观普通的字符串版本。函数repr尝试创建给定值的Python表示。函数ascii创建只包含ASCII字符的表示。

填充与对齐

:后面带填充的字符(只能一个字符,不指定默认是空格) ^、<、>分别是居中、左对齐、右对齐,后面带宽度 >>> c = "名字是:{name},年龄是:{age:^8}" >>> c.format(age = 18, name = '张三') '名字是:张三,年龄是:18'说明符=,指定将填充字符放在符号和数字之间。 >>> print("{0:=8.2f}".format(-3.14)) -***3.14浮点数用f,整数用d进行格式化,具体如下: >>> a = "名字是:{0},存款有:{1:.2f}" >>> a.format('张三', 200.2222) '名字是:张三,存款有:200.22'

b = "名字是:{0},存款有:{1:0>8d}" b.format('张三', 200) '名字是:张三,存款有:00000200'

str和repr

str能以合理的方式将值转换为用户能够看懂的字符串,而repr通常会获得值的合法Python表达式表示。 >>> s = 'Hello, nworld!' >>> print(repr(s)) 'Hello, nworld!' >>> print(str(s)) Hello, world!str是一个类,但repr是一个函数。

长字符串、原始字符串

要表示很长的字符串(跨越多行的字符串),可使用三引号。 >>> print('''我是 ... 李 ... 小 ... 龙''') 我是 李 小 龙常规字符串也可横跨多行,只要在行尾加上反斜杠,反斜杠和换行符将被转义,即被忽略。 >>> print('我是\ ... 李小龙') 我是李小龙原始字符串用前缀r表示。可在原始字符串中包含任何字符,一个例外是,引号需要像通常那样进行转义,但这意味着用于执行转义的反斜杠也将包含在最终的字符串中。 >>> print("Let's go!") Let's go! >>> print(r"Let's go!") Let's go!另外,原始字符串不能以单个反斜杠结尾。如果要指定以反斜杠结尾的原始字符串(如以反斜杠结尾的DOS路径),该如何办呢? >>> print(r'C:\hello''\') C:\hello\

驻留机制

几种情况:

  1. 字符串在编译时驻留,而非运行时
  2. 字符串长度为0或1时
  3. 字符串由26个英文字母大小写,0-9,_组成时
  4. [-5, 256]整数数字

sys中的intern方法可以强制2个字符串指向同一个对象。

PyCharm对字符串进行了优化处理。

本文作者:a

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!