Python中有6种基本数据类型:数字、字符串、列表、字典、元组和集合。本节将对这几种数据类型进行讲解。
Python中的数字分为整型和浮点型两种。
整型数字(用int表示)与数学中的整数一样,都是指不带小数点的数字,包括正整数、负整数和0。下述代码中的数字都是整型数字:
1 a = 10 2 b = -80 3 c = 8500 4 d = 0
使用print()函数可以直接输出整数,演示代码如下:
1 print(10)
运行结果如下:
1 10
浮点型数字(用float表示)是指带有小数点的数字。下述代码中的数字都是浮点型数字:
1 a = 10.5 2 pi = 3.14159 3 c = -0.55
浮点型数字也可以用print()函数直接输出,演示代码如下:
1 print(10.5)
运行结果如下:
1 10.5
顾名思义,字符串(用str表示)就是由一个个字符连接起来的组合。组成字符串的字符可以是数字、字母、符号(包括空格)、汉字等。字符串的内容需置于一对引号内,引号可以是单引号、双引号或三引号,但必须是英文引号。
定义字符串的演示代码如下:
1 print(520) 2 print('520')
运行结果如下:
1 520 2 520
输出的两个520看起来没有任何差别,但是前一个520是整型数字,可以参与加减乘除等算术运算,后一个520是字符串,不能参与加减乘除等算术运算,否则会报错。
下面分别讲解用3种形式的引号定义字符串的方法。
1. 用单引号定义字符串
用单引号定义字符串的演示代码如下:
1 print('明天更美好')
运行结果如下:
1 明天更美好
2. 用双引号定义字符串
用双引号定义字符串和用单引号定义字符串的效果相同,演示代码如下:
1 print("明天更美好")
运行结果如下:
1 明天更美好
需要注意的是,定义字符串时使用的引号形式必须统一,不能混用,即一对引号必须都是单引号或双引号,不能一个是单引号,另一个是双引号。
有时一行代码中会同时出现单引号和双引号,就要注意区分哪些引号是用于定义字符串的,哪些引号是字符串的内容。演示代码如下:
1 print("Let's go")
运行结果如下:
1 Let's go
上述代码中的双引号是定义字符串的引号,不会被print()函数输出,而单引号则是字符串的内容,会被print()函数输出。
3. 用三引号定义字符串
三引号就是3个连续的单引号或双引号。用三引号定义字符串的演示代码如下:
1 print('''2022, 2 一起加油! 3 ''')
运行结果如下:
1 2022, 2 一起加油!
可以看到,三引号中的字符串内容是可以换行的。如果只想使用单引号或双引号来定义字符串,但又想在字符串中换行,可以使用转义字符“\n”,演示代码如下:
1 print('2022,\n一起加油!')
运行结果如下:
1 2022, 2 一起加油!
除了“\n”之外,转义字符还有很多,它们大多数是一些特殊字符,并且都以“\”开头。例如,“\t”表示制表符,“\b”表示退格,等等。
在编程时,转义字符可能会给我们带来一些麻烦。例如,如果想输出一个文件路径,演示代码如下:
1 print('d:\number.xlsx')
运行结果如下:
1 d: 2 umber.xlsx
这个结果与我们预期的不同,原因是Python将路径字符串中的“\n”视为了一个转义字符。
为了正确输出该文件路径,可以将代码修改为如下两种形式:
1 print(r'd:\number.xlsx') 2 print('d:\\number.xlsx')
第1行代码通过在字符串前面增加一个字符r来取消转义字符“\n”的换行功能;第2行代码则是将路径中的“\”改为“\\”,“\\”也是一个转义字符,它代表一个反斜杠字符“\”。
运行结果如下:
1 d:\number.xlsx 2 d:\number.xlsx
列表(用list表示)是最常用的Python数据类型之一,它能将多个数据有序地组织在一起,并方便地调用。
1. 列表入门
先来学习创建一个最简单的列表。例如,通过如下代码可以把5个姓名存储在一个列表中:
1 class1 = ['李白', '王维', '孟浩然', '王昌龄', '王之涣']
从上述代码可以看出,定义一个列表的语法格式为:
列表名 = [元素1, 元素2, 元素3 ……]
列表的元素可以是字符串,也可以是数字,甚至可以是另一个列表。如下所示的这行代码定义的列表就含有3种元素:整型数字1、字符串'123'、列表[1, 2, 3]。
1 a = [1, '123', [1, 2, 3]]
利用for语句可以遍历列表中的所有元素,演示代码如下:
1 class1 = ['李白', '王维', '孟浩然', '王昌龄', '王之涣'] 2 for i in class1: 3 print(i)
运行结果如下:
1 李白 2 王维 3 孟浩然 4 王昌龄 5 王之涣
2. 统计列表的元素个数
如果需要统计列表的元素个数(又称为列表的长度),可以使用len()函数。该函数的语法格式为:
len(列表名)
演示代码如下:
1 class1 = ['李白', '王维', '孟浩然', '王昌龄', '王之涣'] 2 a = len(class1) 3 print(a)
因为列表class1有5个元素,所以代码的运行结果如下:
1 5
3. 提取列表的单个元素
列表中的每个元素都有一个索引号,第1个元素的索引号为0,第2个元素的索引号为1,依此类推。如果要提取列表的单个元素,可以在列表名后加上“[索引号]”,演示代码如下:
1 class1 = ['李白', '王维', '孟浩然', '王昌龄', '王之涣'] 2 a = class1[1] 3 print(a)
第2行代码中的class1[1]表示从列表class1中提取索引号为1的元素,即第2个元素,运行结果如下:
1 王维
如果想提取列表class1的第5个元素'王之涣',其索引号是4,则相应的代码是class1[4]。
“索引号从0开始”这个知识点与我们日常的思考习惯不同,初学者应给予重视。
4. 提取列表的多个元素——列表切片
如果想一次性提取列表中的多个元素,就要用到列表切片,其一般语法格式为:
列表名[索引号1:索引号2]
其中,索引号1对应的元素能取到,索引号2对应的元素取不到,俗称“左闭右开”。演示代码如下:
1 class1 = ['李白', '王维', '孟浩然', '王昌龄', '王之涣'] 2 a = class1[1:4] 3 print(a)
在第2行代码的“[]”中,索引号1为1,对应第2个元素,索引号2为4,对应第5个元素,又根据“左闭右开”的规则,第5个元素是取不到的,因此,class1[1:4]表示从列表class1中提取第2~4个元素,运行结果如下:
1 ['王维', '孟浩然', '王昌龄']
当不确定列表元素的索引号时,可以只写一个索引号,演示代码如下:
1 class1 = ['李白', '王维', '孟浩然', '王昌龄', '王之涣'] 2 a = class1[1:] # 提取第2个元素到最后一个元素 3 b = class1[-3:] # 提取倒数第3个元素到最后一个元素 4 c = class1[:-2] # 提取倒数第2个元素之前的所有元素(因为要遵循“左闭右开”的规则,所以不包含倒数第2个元素) 5 print(a) 6 print(b) 7 print(c)
运行结果如下:
1 ['王维', '孟浩然', '王昌龄', '王之涣'] 2 ['孟浩然', '王昌龄', '王之涣'] 3 ['李白', '王维', '孟浩然']
5. 添加列表元素
用append()函数可以给列表添加元素,演示代码如下:
1 score = [] # 创建一个空列表 2 score.append(80) # 用append()函数给列表添加一个元素 3 print(score) 4 score.append(90) # 给列表再添加一个元素 5 print(score)
运行结果如下:
1 [80] 2 [80, 90]
6. 列表与字符串的相互转换
列表与字符串的相互转换在文本筛选中有很大的用处。将列表转换成字符串主要使用的是join()函数,其语法格式如下:
'连接符'.join(列表名)
引号(单引号、双引号皆可)中的内容是元素之间的连接符,如“,”“;”等。
例如,将class1转换成一个用逗号连接的字符串,演示代码如下:
1 class1 = ['李白', '王维', '孟浩然', '王昌龄', '王之涣'] 2 a = ','.join(class1) 3 print(a)
运行结果如下:
1 李白,王维,孟浩然,王昌龄,王之涣
如果把第2行代码中的逗号换成空格,那么输出的就是“李白 王维 孟浩然 王昌龄 王之涣”。
将字符串转换为列表主要使用的是split()函数,其语法格式如下:
字符串.split('分隔符')
以空格为分隔符将字符串'hi hello world'拆分成列表的演示代码如下:
1 a = 'hi hello world' 2 print(a.split(' '))
运行结果如下:
1 ['hi', 'hello', 'world']
字典(用dict表示)是另一种存储多个数据的数据类型。例如,假设class1里的每个姓名都有一个编号,若要把姓名和编号一一配对,就需要用字典来存储数据。定义一个字典的基本语法格式如下:
字典名 = {键1: 值1, 键2: 值2, 键3: 值3 ……}
字典的每个元素都由两个部分组成(而列表的每个元素只有一个部分),前一部分称为键(key),后一部分称为值(value),中间用冒号分隔。
键相当于一把钥匙,值相当于一把锁,一把钥匙对应一把锁。那么对于class1里的每个姓名来说,一个姓名对应一个编号,相应的字典写法如下:
1 class1 = {'李白': 85, '王维': 95, '孟浩然': 75, '王昌龄': 65, '王之涣': 55}
提取字典中某个元素的值的语法格式如下:
字典名['键名']
例如,要提取'王维'的编号,演示代码如下:
1 class1 = {'李白': 85, '王维': 95, '孟浩然': 75, '王昌龄': 65, '王之涣': 55} 2 score = class1['王维'] 3 print(score)
运行结果如下:
1 95
如果想遍历字典,输出每个姓名和编号,演示代码如下:
1 class1 = {'李白': 85, '王维': 95, '孟浩然': 75, '王昌龄': 65, '王之涣': 55} 2 for i in class1: 3 print(i + ': ' + str(class1[i]))
这里的i是字典里的键,也就是'李白'、'王维'等姓名,class1[i]则是键对应的值,即每个姓名的编号。因为编号的数据类型为数字,所以在进行字符串拼接前需要先用str()函数将其转换为字符串。运行结果如下:
1 李白: 85 2 王维: 95 3 孟浩然: 75 4 王昌龄: 65 5 王之涣: 55
另一种遍历字典的方法是用字典的items()函数,演示代码如下:
1 class1 = {'李白': 85, '王维': 95, '孟浩然': 75, '王昌龄': 65, '王之涣': 55} 2 a = class1.items() 3 print(a)
运行结果如下。可以看到,items()函数返回的是可遍历的(键,值)元组数组。
1 dict_items([('李白', 85), ('王维', 95), ('孟浩然', 75), ('王昌龄', 65), ('王之涣', 55)])
相对于列表和字典来说,元组和集合用得较少,因此这里只做简单介绍。
元组(用tuple表示)的定义和使用方法与列表极为相似,区别在于定义列表时使用的符号是中括号[ ],而定义元组时使用的符号是小括号( ),并且元组中的元素不可修改。元组的定义和使用的演示代码如下:
1 a = ('李白', '王维', '孟浩然', '王昌龄', '王之涣') 2 print(a[1:3])
运行结果如下。可以看到,从元组中提取元素的方法和列表是一样的。
1 ('王维', '孟浩然')
集合(用set表示)是一个无序的不重复序列,也就是说,集合中不会有重复的元素。可用大括号{ }来定义集合,也可用set()函数来创建集合,演示代码如下:
1 a = ['李白', '李白', '王维', '孟浩然', '王昌龄', '王之涣'] 2 print(set(a))
运行结果如下。可以看到,生成的集合中自动删除了重复的元素。
1 {'李白', '王维', '王之涣', '孟浩然', '王昌龄'}