Python组合数据类型
本文最后更新于 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、删除字典
- 感谢你赐予我前进的力量