字符串
字符串
表示
由一对单引号或双引号表示,仅表示单行字符串;
由一对三单引号或三双引号表示,可表示多行字符串;
字符串不可变;
s1 = 'hello, world!'
s2 = "hello, world!"
# 以三个双引号或单引号开头的字符串可以折行
s3 = """
hello,
world!
"""
print(s1, s2, s3, end='')
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
可以在字符串中使用\
(反斜杠)来表示转义,也就是说\
后面的字符不再是它原来的意义,例如:\n
不是代表反斜杠和字符n,而是表示换行;而\t
也不是代表反斜杠和字符t,而是表示制表符。所以如果想在字符串中表示'
要写成\'
,同理想表示\
要写成\\
。可以运行下面的代码看看会输出什么。
s1 = '\'hello, world!\''
s2 = '\n\\hello, world!\\\n'
print(s1, s2, end='')
>>>'hello, world!'
>>>\hello, world!\
1
2
3
4
5
6
2
3
4
5
6
在\
后面还可以跟一个八进制或者十六进制数来表示字符,例如\141
和\x61
都代表小写字母a
,前者是八进制的表示法,后者是十六进制的表示法。也可以在\
后面跟Unicode字符编码来表示字符,例如\u9a86\u660a
代表的是中文“骆昊”。运行下面的代码,看看输出了什么。
s1 = '\141\142\143\x61\x62\x63'
s2 = '\u9a86\u660a'
print(s1, s2)
>>>abcabc 骆昊
1
2
3
4
2
3
4
如果不希望字符串中的\
表示转义,我们可以通过在字符串的最前面加上字母r
来加以说明,再看看下面的代码又会输出什么。
s1 = r'\'hello, world!\''
s2 = r'\n\\hello, world!\\\n'
print(s1, s2, end='')
>>>\'hello, world!\' \n\\hello, world!\\\n
1
2
3
4
2
3
4
字符串切片高级用法
使用[M: N: K]
根据步长对字符串切片
<字符串>[M: N]
,M缺失表示至开头,N缺失表示至结尾
"〇一二三四五六七八九十"[:3]
>>>结果是 "〇一二"
1
2
2
<字符串>[M: N: K]
,根据步长K对字符串切片
"〇一二三四五六七八九十"[1:8:2]
>>>结果是 "一三五七"
"〇一二三四五六七八九十"[::-1]
>>>结果是 "十九八七六五四三二一〇"
1
2
3
4
5
6
7
2
3
4
5
6
7
字符串操作符
符号 | 功能 |
---|---|
+ | 拼接两个字符串 |
* | nx 或者 xn复制n次字符串x |
in | x in s:判断x是否为s的子串 |
字符串处理方法
名称 | 功能 |
---|---|
len(x) | 返回字符串x的长度,如果换成bytes,len()函数就计算字节数 |
str(x) | 任意类型x所对应的字符串形式 |
hex(x) 或 oct(x) | 整数x(整型)的十六进制或八进制小写形式字符串 |
chr(x) | x为Unicode编码,返回其对应的字符 |
ord(x) | x为字符,返回其对应的Unicode编码 |
center() | 通过在两边添加字符让字符串居中 |
find() | 返回子串的第一个字符的索引,否则返回-1 |
join() | 合并序列的元素,与split相反;str.join(iter) 在iter变量除最后元素外每个元素后增加一个str;eg",".join("12345") 结果为"1,2,3,4,5" #主要用于字符串分隔等 |
split() | 将字符串拆分为序列,如果未指定分隔符,将默认在单个或多个连续的空白字符(空白泛指任何非打印字符,如空格、制表符、换行符等)进行拆分 |
translate() | 单字符替换 |
str.split(sep=None) | 返回一个列表,由str根据sep被分隔的部分组成;"A,B,C".split(",") 结果为 ['A','B','C'] |
str.count(sub) | 返回子串sub在str中出现的次数 |
str.replace(old, new) | 返回字符串str副本,所有old子串被替换为new |
str.center(width[,fillchar]) | 字符串str根据宽度width居中,fillchar可选;"python".center(20,"=") 结果为'=======python=======' |
str.strip(chars) | 从str中去掉在其左侧和右侧chars中列出的字符,rstrip()****:末尾(暂时删除)、lstrip()****:头;要想永久删除,将修改后的值重新赋值给变量。"= python= ".strip(" =np") 结果为"ytho" |
title()、upper()、 lower() | 首字母大写、全部大写、全部小写 |
s1 = 'hello ' * 3
print(s1) # hello hello hello
s2 = 'world'
s1 += s2
print(s1) # hello hello hello world
print('ll' in s1) # True
print('good' in s1) # False
str2 = 'abc123456'
# 从字符串中取出指定位置的字符(下标运算)
print(str2[2]) # c
# 字符串切片(从指定的开始索引到指定的结束索引)
print(str2[2:5]) # c12
print(str2[2:]) # c123456
print(str2[2::2]) # c246
print(str2[::2]) # ac246
print(str2[::-1]) # 654321cba
print(str2[-3:-1]) # 45
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
在Python中,我们还可以通过一系列的方法来完成对字符串的处理,代码如下所示。
str1 = 'hello, world!'
# 通过内置函数len计算字符串的长度
print(len(str1)) # 13
# 获得字符串首字母大写的拷贝
print(str1.capitalize()) # Hello, world!
# 获得字符串每个单词首字母大写的拷贝
print(str1.title()) # Hello, World!
# 获得字符串变大写后的拷贝
print(str1.upper()) # HELLO, WORLD!
# 从字符串中查找子串所在位置
print(str1.find('or')) # 8
print(str1.find('shit')) # -1
# 与find类似但找不到子串时会引发异常
# print(str1.index('or'))
# print(str1.index('shit'))
# 检查字符串是否以指定的字符串开头
print(str1.startswith('He')) # False
print(str1.startswith('hel')) # True
# 检查字符串是否以指定的字符串结尾
print(str1.endswith('!')) # True
# 将字符串以指定的宽度居中并在两侧填充指定的字符
print(str1.center(50, '*'))
# 将字符串以指定的宽度靠右放置左侧填充指定的字符
print(str1.rjust(50, ' '))
str2 = 'abc123456'
# 检查字符串是否由数字构成
print(str2.isdigit()) # False
# 检查字符串是否以字母构成
print(str2.isalpha()) # False
# 检查字符串是否以数字和字母构成
print(str2.isalnum()) # True
str3 = ' jackfrued@126.com '
print(str3)
# 获得字符串修剪左右两侧空格之后的拷贝
print(str3.strip())
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
字符串类型格式化
%运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,%x表示十六进制整数,%f表示浮点数;有几个**%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?**,括号可以省略。
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
1
2
3
4
5
2
3
4
5
格式化是对字符串进行格式表达的方式
字符串格式化使用**.format()**方法,用法如下:
<模板字符串>.format(<逗号分隔的参数>)
Python 3.6以后,格式化字符串还有更为简洁的书写方式,就是在字符串前加上字母f
,我们可以使用下面的语法糖来简化上面的代码。
a, b = 5, 10
print(f'{a} * {b} = {a * b}')
1
2
2
上次更新: 2025/04/02, 12:03:38