在编程语言中,通常使用变量来存储数据,为了更加充分地利用计算机内存空间,需要为变量指定不同的数据类型。本节介绍Python中常见的几种数据类型,包括数值、字符串、列表、元组、集合和字典。
Python中的数值类型用于存储数值,主要有整数(int)和小数(float)两种。注意,Python的数值类型的变量是不可变对象,如果要改变变量的值,相当于定义了新的对象(即重新分配了内存空间)。例如,数据分析师小王统计汇总上个月商品总的退单量是29件,输入代码如下:
order_return = 29
但是,小王检查代码时发现自己设置订单日期时没有设置结束日期,导致退单量偏大,实际只有21件,重新输入的代码如下:
order_return = 21
运行上述代码后,现在变量order_return的数值就是商品的退单量21,而不再是前面输入的29,示例代码和输出如下:
order_return
21
Python还提供了丰富的函数,其中数学函数、随机数函数、三角函数等返回的值都是数值类型。表2-1列举了一些常用的数学函数。
表2-1 常用的数学函数
字符串是Python中常用的数据类型。我们可以使用英文的单引号('')或双引号("")来创建字符串,字符串可以是英文、中文或中英文的混合。例如,输入以下代码:
str1 = "Hello Python!" str2 = "你好Python!"
运行str1和str2,输出如下:
str1
'Hello Python!' str2
'你好Python!'
在Python中,可以通过“+”实现字符串与其他字符串的串接,例如输入以下代码:
str3 = str1 + " My name is Wren!"
输入str3变量,输出如下:
str3
'Hello Python! My name is Wren!'
在字符串中,我们可以通过索引获取字符串中的字符,遵循“左闭右开”的原则,注意索引是从0开始的。例如,截取str1的前5个字符,示例代码如下:
str1[:5] #或者str1[0:5]
运行上述代码,输出str1中的前5个字符“Hello”,索引分别对应0、1、2、3、4。原字符串中每个字符所对应的索引号如表2-2所示。
表2-2 字符串的索引
此外,还可以使用反向索引实现上述同样的需求,但是索引位置有变化,分别对应-13、-12、-11、-10、-9,示例代码和输出如下:
str1[-13:-8]
'Hello'
同理,我们也可以截取原字符串中的“Python”子字符串,索引的位置是6~12,包含6,但不包含12,截取字符串的示例代码和输出如下:
str1[6:12]
'Python'
Python提供了方便灵活的字符串运算,表2-3列出了用于字符串运算的运算符。
表2-3 字符串运算符
下面以成员运算符为例介绍字符串运算符。例如,我们要判断Python是否在字符串变量str1中,示例代码和输出如下:
'Python' in str1
True
这里显示的是True,如果不存在,结果就为False。
列表是常用的Python数据类型,使用方括号创建,数据项用逗号分隔。注意列表的数据项不需要具有相同的类型。例如,创建3个列表,示例代码如下:
list1 = ['region', 2019, 2020] list2 = [289, 258, 191, 153] list3 = ["south", "north", "east", "west"]
运行上述创建列表的代码,输出如下:
列表的索引与字符串的索引一样,也是从0开始的,此外,还可以进行截取、组合等操作。例如,我们截取list3中的索引1~3,当不包含索引为3的字符串时,示例代码和输出如下:
list3[1:3]
['north', 'east']
可以对列表的数据项进行修改或更新。例如,修改列表list1中索引为1的元素的数值2019,将其修改为文本“2019年”,示例代码和输出如下:
可以使用del语句来删除列表中的元素,示例代码和输出如下:
del list1[1] list1
['region', 2020]
也可以调用append()方法在尾部添加列表项,示例代码和输出如下:
list1.append(2021) list1
['region', 2020, 2021]
此外,还可以调用insert()方法在中间添加列表项,示例代码和输出如下:
list1.insert(1,2019) list1
['region', 2019, 2020, 2021]
Python的元组与列表类似,不同之处在于元组的元素不能修改。注意元组使用小括号,而列表使用方括号。元组的创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。例如,创建3个企业商品有效订单的元组,示例代码如下:
tup1 = ('region', 2019, 2020) tup2 = (289, 258, 191, 153) tup3 = ("south", "north", "east", "west")
运行上述创建元组的代码,输出如下:
元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用,示例代码和输出如下:
元组的索引与字符串的索引一样,也是从0开始的,也可以进行截取、组合等操作。例如,我们截取tup3中的索引1~3,当不包含索引为3的元素时,示例代码和输出如下:
tup3[1:3]
('north', 'east')
在Python中,也可以通过“+”实现对元组的串接,运算后会生成一个新的元组,示例代码和输出如下:
tup6 = tup1 + tup4 tup6
('region', 2019, 2020, 2021)
注意,元组中的元素是不允许修改和删除的。例如,当试图修改元组tup6中第4个元素的数值时,系统会提示如下错误信息:
集合是一个无序的不重复的元素序列,可以使用大括号或者调用set()函数来创建。注意,创建一个空集合时必须调用set()函数,因为{ }是用来创建一个空字典的,并不是用来创建空集合的。创建集合的语法格式如下:
parame = {value01, value02, ...} 或者 set(value)
下面以客户购买商品为例介绍集合的去重功能,假设某客户在11月份购买了6次商品,分别是打印纸、椅子、书籍、配件、文件夹、配件,这里有重复的商品,我们可以借助集合删除重复值,示例代码如下:
buy_oct = {'打印纸','椅子','书籍','配件','文件夹','配件'}
运行上述代码,输出如下:
buy_oct
{'书籍', '文件夹', '椅子', '打印纸', '配件'}
可以看出已经删除了重复值,只保留了5种不同类型的商品名称。
同理,该客户在12月份购买了4次商品,分别是装订机、椅子、书籍、配件,示例代码和输出如下:
buy_nov = {'装订机','椅子','书籍','配件'} buy_nov
{'书籍', '椅子', '装订机', '配件'}
可以快速判断某个元素是否在某集合中,例如判断该客户11月份是否购买了“配件”,示例代码和输出如下:
'配件' in buy_oct
True
Python中的集合与数学上的集合概念基本类似,也有交集、并集、差集和补集,集合之间关系的维恩图如图2-1所示。
图2-1 集合间的关系
集合的交集,例如,统计该客户11月份和12月份都购买的商品,示例代码和输出如下:
buy_oct & buy_nov
{'书籍', '椅子', '配件'}
集合的并集,例如,统计该客户11月份和12月份购买的商品,示例代码和输出如下:
buy_oct | buy_nov
{'书籍', '文件夹', '椅子', '打印纸', '装订机', '配件'}
集合的差集,例如,统计该客户在11月份和12月份不同时购买的商品,示例代码和输出如下:
buy_oct ^ buy_nov
{'文件夹', '打印纸', '装订机'}
集合的补集,例如,统计该客户11月份购买,而12月份没有购买的商品,示例代码和输出如下:
buy_oct - buy_nov
{'文件夹', '打印纸'}
字典是另一种可变容器模型,可存储任意类型的对象。字典的每个“键-值对”(Key-Value Pair)用冒号隔开,每个“键-值对”之间用逗号分隔开,整个字典包括在花括号中,语法格式如下:
dict = {key1:value1, key2:value2}
注意,“键-值对”中的键必须是唯一的,但是值可以不唯一,且数值可以取任何数据类型,但键必须是不可变的,如字符串或数字,示例代码如下:
dict1 = {'order': 291} dict2 = {'order': 291, 2020:3} dict3 = {'south': 289, 'north': 258, 'east': 191, 'west': 153}
运行上述代码,新建的字典如下:
在Python中,如果要访问字典中的值,需要把相应的键放入方括号中,示例代码和输出如下:
dict3['north']
258
在Python中,如果字典中没有该键,就会报错,示例代码及其输出的错误信息如下:
在Python中,向字典添加新内容的方法是增加新的“键-值对”、修改已有“键-值对”。若要向字典dict2中添加键sales,示例代码和输出如下:
在Python中,能够删除字典中的单一元素,也能清空和删除字典。若要删除字典dict2中的键2020,然后清空字典,最后删除字典,示例代码和输出如下: