本文最后更新于 2024-12-20,文章内容可能已经过时。

字符串

字符串是Python中最常用的数据类型,是由字母、符号或数字组成的字符序列。Python支持使用单引号,双引号和三引号定义字符串,其中单引号和双引号通常同于定义单行字符串,三引号通常用于定义多行字符串。Python不支持单字符类型,单字符在Python中同样作为一个字符串使用。

1、字符串的创建

s1 = '单引号定义字符串'
s2 = "双引号定义字符串"
s3 = '''三引号定义
                  多行字符串'''
s4 = """三引号定义
                  多行字符串"""
s5 = 'a'

print(s1)
print(s2)
print(s3)
print(s4)
print(s5)

# 运行代码 输出结果
单引号定义字符串
双引号定义字符串
三引号定义
          多行字符串
三引号定义
          多行字符串
a

程序段1-1 字符串的多种创建方式

引号既可以用来定义字符串,也可以作为字符串的一部分。为了避免Python解释器出现配对语法错误,也可以选择字符串本身不包含的其他引号来包裹字符串,见程序段1-2。

S1 = "包含单引号的'字符串'用双引号定义"
s2 = '包含双引号的"字符串"用单引号定义'
print(s1)
print(s2)
# 运行代码 输出结果
包含单引号的'字符串'用双引号定义
包含双引号的"字符串"用单引号定义

程序段1-2 Python解释器对引号的配对

除此之外,还可以利用反斜杠"\"对引号进行转义来实现。若在字符串中的引号前添加"\",那么Python解释器就会将"\"之后的引号作为一个普通字符,而非特殊符号。转义符同样适用于对字符串中的双引号或反斜杠进行转义,见程序段1-3。

S1 = 'let\'s learn python'
s2 = "转义反斜杠\\的字符串定义"
s3 = "转义反斜杠\"的字符串定义"
print(s1)
print(s2)
print(s3)

# 运行代码 输出结果
let's learn python
转义反斜杠\的字符串定义
转义反斜杠"的字符串定义

程序段1-3 Python转义反斜杠\

一些普通字符串与反斜杠组合后将失去原有的意义,产生新的含义,因此,由"\"与普通字符组合而成的、具有特殊意义的字符就是转义字符。转义字符通常用于表示一些无法显示的字符,如空格、回车等,见表1-1。

转义字符 功能描述
\b 退格(Backspace)
\n 换行
\w 纵向制表符
\t 横向制表符
\r 回车

表1-1 转义字符与功能

如果一个字符串包含多个转义字符,但又不希望转义字符产生作用,则可以使用原始字符串,即在字符串开始的引号之前添加r或R,使它成为原始字符串。原始字符串会完全忽略字符串中的转义字符,见程序段1-4。

s1 = r"转义中:\n表示换行"
s2 = R"转义中:\r表示回车"
print(s1)
print(s2)

程序段1-4 消除转义的R与r

运行代码,输出结果:

转义中:\n表示换行
转义中:\r表示回车

2、字符串的访问

Python中的字符串相当于字符串组,访问字符串可以使用方括号来截取字符串,见语法格式2-1。

b

语法格式2-1 字符串简单的切片

索引值以0为开始值,-1为从末尾的开始位置,见程序段2-1。

s1 = "0从字符串前面开始的位置"
s2 = "-1从字符串后面开始的位置"
print(s1[2])
print(s1[2:5])
print(s2[-2])
print(s2[-3:-1])

程序段2-1 字符串切片的使用

运行代码,输出结果如下:

字
字符串
置
位置

3、字符串的输入输出

1)input()输入函数

input()函数用于接收用户从键盘输入的数据,返回一个字符串类型的数据,见语法格式3-1。

i

语法格式3-1 input()函数

上式中,prompt是input()函数的参数,用于设置接收用户输入输出时的提示信息,可以省略。

input()函数返回的是字符串,若需要输入其他类型的数据,则可以使用相应的转换函数,见程序段3-1。

name = input("请输入姓名:")
age = int(input("请输入年龄:"))
score = float(input("请输入分数:"))
print(name, age, score)

程序段3-1 input()函数与转换函数组合

运行代码,输出结果如下:

请输出姓名:张三
请输出年龄:25
请输入分数:85.5
李红 25 85.5

2)print()输出函数

print()函数用于向控制台输出数据,它可以输出任何类型的数据,见语法格式3-2。

print(object,step=",end='\n',file=sys.stdout)

语法格式3-2 print()语法格式

上式中各参数的含义如下:

参数 描述
objects 表示输出的对象。当输出多个对象时,对象之间需要用分隔符分隔。
sep 用于设定分隔符,默认为空格。
end 用于设定输出以什么结尾,默认值为换行符 \n
file 表示数据输出的文件对象,默认是控制台。
name = "张三"
age = 25
score = 85.5
print(name,age,score)
print(name,age,sep="-")

程序段3-1 print()函数的使用

运行代码,输出结果如下:

李红 25 85.5
李红-25-85.5

4、格式化字符串

格式化字符串是将制定的字符串转换为想要的格式。Python中有3种格式化字符串的方法。

1)使用%格式化字符串

string%values

语法格式4-1 %格式化字符串

其中

术语 描述
string 表示一个字符串,该字符串中包含单个或多个为真实数据占位的格式符
values 表示单个或多个真实数据
% 代表执行格式化操作

Python中常见的格式符及功能描述,见表4-1。

格式符 功能描述
%c 将对应的数据格式化为字符
%s 将对应的数据格式化为字符串
%d 将对应的数据格式化为整数
%u 将对应的数据格式化为无符号整数
%o 将对应的数据格式化为无符号八进制
%x 将对应的数据格式化为无符号十六进制
%f 将对应的数据格式化为浮点数,可指定小数点后的精度(默认保留6位小数)

格式符均由%和字符组成,其中,%用于标识格式符的起始,它后面的字符表示真实数据被转换的类型,%格式化字符串示例程序段见4-1。

name = "张三"
age = 25
score = 85.5
print("姓名:%s,年龄:%d成绩,成绩:%f" % (name, age, score))
print("姓名:%s\n,年龄:%d\n,成绩:%.2f" % (name, age, score))

程序段4-1 %格式化字符串代码

运行代码,输出结果如下:

姓名:张三,年龄:25,成绩:85.500000

姓名:李红
年龄:25
成绩:85.50

2)使用format格式化字符串

虽然使用%可以对字符串进行格式化,但是这种格式化并不是很直观,一单遗留了替换数据或者选择了不匹配的格式符,就会导致字符串格式化失败,为了能更直观、更便捷的格式化字符串,Python字符串提供了一个格式化方法-format()。见语法格式4-2。

string.format(values)

语法格式4-2 format()格式化

其中:

参数 描述
string 表示需要被格式化的字符串,字符串中包含单个或多个为真实数据占位的符号
values 表示单个或多个待替换的真实数据,多个数据之间以逗号分隔
name = "张三"
age = 25
score = 85.5
print("姓名:{},年龄:{},成绩:{}".format(name, age, score))
print("姓名:{}\n年龄:{}\n成绩:{}".format(name, age, score))

程序段4-2 format()函数格式化字符串应用

运行代码,输出结果如下:

姓名:张三,年龄:25,成绩:85.5
姓名:张三
年龄:25
成绩:85.5

字符串中包含多个{},当格式化字符串时,Python解释器默认按从左到右的顺序将{}主格替换为真实数据;

在字符串的{}中可以明确的指出编号,当格式化字符串时解释器会按编号取values中的相应位置(索引)的值替换{},values中元素的索引从0开始排序;

在字符串的{}中可以指定名称,当格式化字符串时Python解释器会按照真实数据绑定名称替换{}中的变量;

在字符串中的{}还可以指定替换的浮点型数据的精度,示例代码见程序段4-3

name = "张三"
age  = 25
score = 85.5
print("姓名:{0},年龄:{1},成绩:{2}".format(name, age, score))
print("姓名:{name}\n成绩:{score}".format(name = name, score = score))
print("成绩:{:.2f}".format(score))

程序段4-3 format()中{}的多种方式

运行代码,输出结果如下:

姓名:张三,年龄:25,成绩:85.5

姓名:张三
成绩:85.5

成绩:85.50

3)使用f-string格式化字符串

f-string是一种更为简洁的格式化字符串方式,它在形式上以f或F引领字符串,在字符串中使用{变量名}标识被替换的真实数据和其所在位置,见语法格式4-3。

f("{变量名}}")或F("变量名")

语法格式4-3 f-string格式化字符串

name = "张三"
age = 25
score = 85.5
print(f"姓名:{name},年龄:{age},成绩:{score}")
print(F"姓名:{name},年龄:{age},成绩:{score}")

程序段4-4 f-string格式符字符串应用

字节组

字节组(bytes)是由单个字节组作为基本元素(8位二进制数据,即2位16进制数据,取值范围是0~255)组成的组合数据类型,可以将字节组视为一个字节容器,容器里的每个元素都是1个字节。

bytes只负责以字节序列的形式存储数据,至于这些数据到底表示什么内容,完全由程序的解析方式决定。如果采用合适的字符编码方式,字节组可以恢复成字符串;

反之,字符串也可以转换成字节组。bytes类型的数据非常适合在互联网上传输,可以用于网络通信编程;bytes也可以用来存储图片、音频、视频等二进制格式的文件。

字节组的所有元素被放在带有b前缀的单引号中,并用\x符号分隔开,x表示16进制,\用于分割每个字节,如下所示。

b'element1\element2......\elementn'

对于ASCII字符串,可以直接使用b'xxxx'的形式赋值创建字节组;但对于非ASCII编码的字符,则必须通过bytes来创建。

1、字节组的创建

在Python中创建字节组,可以通过调用bytes类生成bytes实例来实现,语法格式如下:

bytes([source[,encoding]])

语法格式 2-1-1 bytes()语法格式

参数 含义
source 若source为整数,则返回一个长度为source的初始化字节组;若source为字符串,则按照指定的encoding将字符串转换为字节组;若source为序列数据,则元素必须为[0,255]中的整数
encoding 字符编码方式,如ASCII、UTF-8、GBK等
by1 = bytes(2)
by2 = bytes('hi',encoding = 'ascii')
by3 = bytes("好",encoding = "utf-8")
by4 = bytes([1,2,3])
print(by1.by2,by3,by4)

程序段2-1-1 bytes()函数应用

运行代码,输出结果如下:

b'\x00\x00 b'hi' b'\xe5\xa5\xbd' b'\x01\x02\x03' <class 'bytes'>

2、字节组的访问

由于bytes是序列,因此我们可以通过 索引或切片访问它的元素。如果以单个索引的形式访问元素,则会直接返回单个字节十进制整数;

当以序列片段的形式访问时,则返回相应的十六进制字节序列,见程序段2-2-1。

by1 = b'Hello,python'
by2 = bytes("跟着张三学编程。",encoding = 'utf-8')
print(by1[1],by1[1:5])
print(by2[3],by2[3:5])

程序段2-2-1 bytes()访问实例

运行代码,输出结果如下:

101 b'ello'
231 b'\xe7\x9d'

3、字节组与字符串的转换

字符串str和字节组bytes练习密切,犹如硬币的正反两面。可以将字符串转换成字节组,也可以将字节组转换为字符串。

字符串有一个encode()编码方法,用来将字符串按照指定的编码方式转换成对应的字节组;

字节组有一个decode()解码方法,用来将字节组按照指定的解码方式转换成对应的字符串。

如果不指定编解码方式,则默认采用UTF-8,见程序段2-3-1。

by = bytes("跟着张三学编程",encoding='utf-8') # 创建字节组
print(by)
st = by.decode('utf-8') # 字节组utf-8解码,变换为字符串
print(st)
by1 = st.encode('gbk') # 字符串gbk编码,变换为字节组
print(by1)

程序段2-3-1 decode()与encode()示例

运行代码,输出结果如下:

b'xe9'x98ixbfxe8ix99'x8elxe7xbcx96ixe7ixa8'x8b'
跟着张三学编程
b'xb0'xa2lxbb'xa2\xbllxe0lxb3lxcc

列表

通俗来讲,列表就是一种用来放置数据的容器,该容器中的数据成为元素,每个元素都有一个索引来标识他在列表中的位置。在python中,列表是一种内置的有序、可变序列,列表的所有元素都被放置在一对方括号中,并用逗号分隔开,如下所示:

[element1, element2, element3,...,elementn]

上语法格式中,element1~elementn表示列表中的元素,个数没有限制,只要是Python支持的数据类型就可以。

列表可以存储整数、小数、字符串、列表等任何类型的数据,并且同一列表中的元素的类型可以不同。例如:

['python', 1, [1,2,3],3.0, '计算机']

此列表中同时包含英文字符串、整数、列表、浮点数、中文字符串等数据类型。但通常情况下同一列表中只放入同一类型的数据,这样可以提高程序的可读性。通过type()函数可查看列表的数据类型,例如:

>>> type(['python', 1, [1,2,3],3.0, '计算机'])
<class 'list'>

可以看到,列表的数据类型为list。

列表可分为一维列表、二维列表、多维列表。

1、创建列表

创建列表的方法有3中:[]直接创建、list()函数创建、列表推导式创建,此处仅讲解前两种。

1)使用[]直接创建列表

使用[]创建列表后,一般使用=将它赋值给某个变量,具体格式如下:

listname = [element1, element2, element3,...., elementn]

其中,listname表示变量名,element1~elementn表示列表元素。例如,下面定义的列表都是合法的。

number_list = [1,2,3,4,5,6,7]
program = ['C语言', 'Python', 'Java']

当使用此方式创建列表时,列表中的元素可以有多个,也可以一个都没有。例如:

empty_list = []

这表明,empty_lsit 是一个空列表。

2)使用list()函数创建列表

Python提供了一个内置的函数list(),使用它可以将其他数据类型转换为列表类型。示例代码如下:

listl = list("hello") # 将字符串转换成列表
print(listl)
tuplel =('Python', 'Java', 'C++', 'JavaScrip!’)
list2 = list(tuplel) #将元组转换成列表
piint(list2)
dictl = {'a':100, 'b':42,'c'.9}
list3 = list(dictl) # 将字典的键转换成列表
print(list3)
rangel = range(l, 6)
list4 = list(rangel) #将区间序列数据转换成列表
print(list4)
print(list())# 创建空列表输出

程序段 Python内置函数list()

运行代码,输出结果如下:

['h','e','l','l','o']
['Python','Java','C++','JavaScript']
['a','b','c']
[1,2,3,4,5]
[]

2、访问、修改列表

列表时Python序列的一种,可以使用索引(index)访问列表中的某个元素(得到的是一个元素的值),也可以使用切片访问列表中的一组元素(得到的是一个新的子列表)。

使用索引访问列表元素的如是如下:

listname[i]

其中:

参数 描述
listname 表示列表名字
i 表示索引值;列表的索引可以是正数,也可以是负数

使用切片访问列表元素的格式如下:

listname[star:end:step]

其中:

参数 描述
listname 表示列表名字
start 表示起始索引
end 表示结束索引
step 表示步长
url = list("阿虎编程,虎虎生风。")
print(url[3]) #使用正数索引
print(url[-4]) # 使用负数索引
print(url[3: 9]) # 使用正数切片
print(url[1: 9: 2]) #指定步长
print(url[-6:-1]) # 使用负数切片
url[1] = '龙' # 通过索引修改
print(url)
url[2:4] = "练武 # 通过切片修改
print(url)

程序段 使用切片访问list示例

运行代码,输出结果如下:

程
虎
['程', ',', '虎', '虎', '生', '风']
['虎', '程', '虎', '生']
[',', '虎', '虎', '生', '风']
['阿', '龙', '编', '程', ',', '虎', '虎', '生', '风', '。']
['阿', '龙', '练', '武', ',', '虎', '虎', '生', '风', '。']

3、删除列表

对于已经创建的列表,如果不再使用,则可以使用 del关键字将其删除。但在实际开发中并不经常使用 del 来删除列表,因为Pyhon 自带的垃圾回收机制会自动销毁无用的列表,即使开发者不手动删除,Python 也会自动将其回收。del 关键字的语法格式如下:

del listname
参数 含义
del 删除的关键字
listname 表示要删除列表的名称
intlist = [1, 45, 8, 34]
print(intlist)
del intlist
print(intlist)

程序段 删除列表 del的示例

运行代码,输出结果如下:

Traceback (most recent call last):
  File "C:\Users\wangjincheng\Desktop\Hello算法\dellist.py", line 4, in <module>
    print(intlist)
NameError: name 'intlist' is not defined

这表示出现一个错误,inlist没有定义,intlist已经被删除。

元组

1、创建元组

2、访问元组

集合

1、创建集合

2、访问集合

3、删除集合

字典

1、创建字典

2、访问字典

3、删除字典