字符串

表示

  • 由一对单引号双引号表示,仅表示单行字符串;

  • 由一对三单引号或三双引号表示,可表示多行字符串;

  • 字符串不可变;

1
2
3
4
5
6
7
8
s1 = 'hello, world!'
s2 = "hello, world!"
# 以三个双引号或单引号开头的字符串可以折行
s3 = """
hello,
world!
"""
print(s1, s2, s3, end='')

可以在字符串中使用\(反斜杠)来表示转义,也就是说\后面的字符不再是它原来的意义,例如:\n不是代表反斜杠和字符n,而是表示换行;而\t也不是代表反斜杠和字符t,而是表示制表符。所以如果想在字符串中表示'要写成\',同理想表示\要写成\\。可以运行下面的代码看看会输出什么。

1
2
3
4
5
6
s1 = '\'hello, world!\''
s2 = '\n\\hello, world!\\\n'
print(s1, s2, end='')
>>>'hello, world!'
>>>\hello, world!\

\后面还可以跟一个八进制或者十六进制数来表示字符,例如\141\x61都代表小写字母a,前者是八进制的表示法,后者是十六进制的表示法。也可以在\后面跟Unicode字符编码来表示字符,例如\u9a86\u660a代表的是中文“骆昊”。运行下面的代码,看看输出了什么。

1
2
3
4
s1 = '\141\142\143\x61\x62\x63'
s2 = '\u9a86\u660a'
print(s1, s2)
>>>abcabc 骆昊

如果不希望字符串中的\表示转义,我们可以通过在字符串的最前面加上字母r来加以说明,再看看下面的代码又会输出什么。

1
2
3
4
s1 = r'\'hello, world!\''
s2 = r'\n\\hello, world!\\\n'
print(s1, s2, end='')
>>>\'hello, world!\' \n\\hello, world!\\\n

字符串切片高级用法

使用[M: N: K]根据步长对字符串切片

<字符串>[M: N],M缺失表示至开头,N缺失表示至结尾

1
2
"〇一二三四五六七八九十"[:3] 
>>>结果是 "〇一二"

<字符串>[M: N: K],根据步长K对字符串切片

1
2
3
4
5
6
7
"〇一二三四五六七八九十"[1:8:2] 

>>>结果是 "一三五七"

"〇一二三四五六七八九十"[::-1]

>>>结果是 "十九八七六五四三二一〇"

字符串操作符

符号 功能
+ 拼接两个字符串
* 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() 字母大写全部大写、全部小写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

在Python中,我们还可以通过一系列的方法来完成对字符串的处理,代码如下所示。

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
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())

字符串类型格式化

%运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,%x表示十六进制整数,%f表示浮点数;有几个**%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?**,括号可以省略。

1
2
3
4
5
>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'

格式化是对字符串进行格式表达的方式

字符串格式化使用**.format()**方法,用法如下:

<模板字符串>.format(<逗号分隔的参数>)

image-20210821215354696

image-20210821215401441

image-20210821215408051

image-20210821215414052

image-20210821215418954

Python 3.6以后,格式化字符串还有更为简洁的书写方式,就是在字符串前加上字母f,我们可以使用下面的语法糖来简化上面的代码。

1
2
a, b = 5, 10
print(f'{a} * {b} = {a * b}')