2.1 Python数据类型
Python是一种动态类型的编程语言,因此它支持多种数据类型。Python中的基本数据类型包括数字、字符串、布尔、列表、元组、集合和字典等。本节开始介绍这些数据类型的特点与使用。
2.1.1 数字
Python中的数字(Number)类型用于存储数值,主要有整型(int)和浮点型(float)两种。
例1:我们知道客户是门店最重要的资产,为了更好地了解客户和为客户服务,门店经理让分析师小王统计汇总每日购买商品的客户数,其中今天的客户数为99人,输入代码如下:
cust_num1 = 99
此时,cust_num1变量的值是99,此为整型数据。
例2:门店经理需要统计本月销售数据,经实际计算为2984.5万元,将此数值赋予一个变量,即给门店带来直接利润的客户。会有部分客户进行退货,根据营业流水数据统计,共计8人,因此需要剔除,输入有效客户数的代码如下:
cust_num2 = 2984.5
此时,变量cust_num2的值即为浮点型。
2.1.2 字符串
字符串(String)是Python中常用的数据类型之一。我们可以使用英文输入法下的单引号(' ')或双引号(" ")来创建字符串,字符串可以是英文、中文或中文和英文的混合形式。例如,输入以下代码:
str1 = "Now or never!" str2 = "学习Python!"
此时,创建了两个字符串str1和str2,执行上述代码后两个字符串如下:
str1 'Now or never!' str2 '学习Python!'
在Python中,可以通过“+”实现字符串与其他字符串的拼接,例如输入以下代码:
str3 = str1 + " Work hard to learn Python!"
此时str3字符串如下:
'Now or never! Work hard to learn Python!'
在字符串中,我们可以通过索引获取字符串中的字符,遵循“左闭右开”的原则,注意索引是从0开始的。例如,截取str1的前3个字符,代码如下:
str1[:3] #或者str1[0:3]
输出结果如下:
'Now'
可以看出,程序输出str1中的前3个字符“Now”,索引分别对应0、1、2。原字符串中的每个字符对应的索引号如表2-1所示。
表2-1 字符串索引
此外,还可以使用反向索引实现上述需求,但是索引位置会发生变化,分别对应−13、−12、−11,代码如下:
str1[-13:-11]
输出结果如下:
'Now'
同理,我们也可以截取原字符串中的“never”子字符串,索引的位置是7~12,注意包含7,但不包含12,截取字符串的代码如下:
str1[7:12]
输出结果如下:
'never'
Python提供了方便灵活的字符串运算,表2-2列出了可以用于字符串运算的运算符。
表2-2 字符串运算符
下面以成员运算符in为例介绍字符串运算符,例如,我们需要判断“never”是否在字符串str1中,代码如下:
'never' in str1
输出结果如下:
True
这里显示的是True,如果不存在结果,就输出False。
2.1.3 列表
列表(List)是Python中常用的数据类型之一,使用方括号([])表示。列表中的元素用逗号分隔,并且不需要所有元素具有相同的类型。
例如,创建3个门店有效客户的列表,其中list1为客户张三的个人信息,list2为一周有效客户的数量,list3为客户信息表的主要字段,代码如下:
list1 = ['张三', '男', 18966666666, '东方路666号'] list2 = [91, 78, 83, 85, 82, 129, 116] list3 = ["客户姓名", "客户性别", "联系电话", "联系地址"]
运行上述代码,创建的列表输出如下:
list1 ['张三', '男', 18966666666, '东方路666号'] list2 [91, 78, 83, 85, 82, 129, 116] list3 ['客户姓名', '客户性别', '联系电话', '联系地址']
列表的索引与字符串的索引一样,也是从0开始的,也可以进行截取、组合等操作。例如,我们截取list3中索引从1到3但不包含索引为3的字符串,代码如下:
list3[1:3]
输出结果如下:
['客户性别', '联系电话']
可以对列表的数据项进行修改或更新,例如将列表list1中索引为1的元素“男”改为“女”。首先查看索引为1的元素,代码如下:
list1[1]
输出结果如下:
男
再修改列表的元素,代码如下:
list1[1] = '女' list1
输出结果如下:
['张三', '女', 18966666666, '东方路666号']
可以使用del语句来删除列表中的元素,代码如下:
del list1[1] list1
输出结果如下:
['张三', 18966666666, '东方路666号']
也可以使用append()方法在列表尾部添加列表项,代码如下:
list1.append(29) list1
输出结果如下:
['张三', 18966666666, '东方路666号', 29]
此外,还可以使用insert()方法在中间指定的位置之前添加列表项,代码如下:
list1.insert(1,'男') list1
输出结果如下:
['张三', '男', 18966666666, '东方路666号', 29]
2.1.4 元组
Python的元组(Tuple)与列表类似,不同之处在于元组的元素不能被修改。注意元组使用小括号表示,而列表使用方括号表示。元组的创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
例如,创建3个门店有效客户的元组,其中tup1为客户张三的个人信息,tup2为一周有效客户的数量,tup3为客户信息表的主要字段,代码如下:
tup1 = ('张三', '男', 18966666666, '东方路666号') tup2 = (91, 78, 83, 85, 82, 129, 116) tup3 = ("客户姓名", "客户性别", "联系电话", "联系地址")
运行上述代码,创建的元组输出如下:
tup1 ('张三', '男', 18966666666, '东方路666号') tup2 (91, 78, 83, 85, 82, 129, 116) tup3 ("客户姓名", "客户性别", "联系电话", "联系地址")
如果元组中只包含一个元素,那么需要在元素后面添加逗号,否则括号会被当作运算符使用,示例如下:
tup4 = (29,) tup4 (29,) tup5 = (29) tup5 29
元组的索引与字符串的索引一样,也是从0开始,也可以进行截取、组合等操作。例如,我们截取tup3中索引从1到3但不包含索引为3的元素,代码如下:
tup3[1:3]
输出结果如下:
('客户性别', '联系电话')
在Python中,也可以通过“+”实现对元组的连接,运算后会生成一个新的元组,代码如下:
tup6 = tup1 + tup4 tup6
输出结果如下:
('张三', '男', 18966666666, '东方路666号', 29)
注意,元组中的元素是不允许修改和删除的,例如修改元组tup6中第3个元素的值,代码如下:
tup6[2] = 18988888888
会输出如下错误信息:
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[45], line 1 ----> 1 tup6[2] = 18988888888 TypeError: 'tuple' object does not support item assignment
2.1.5 集合
集合(Set)是一个无序的不重复元素序列,可以使用大括号或者set()函数创建,注意创建一个空集合必须使用set(),因为{}是用来创建一个空字典的。创建集合的格式如下:
parame = {value01, value02, ...}
或者
set(value)
下面以客户购买商品为例介绍集合的去重功能,假设某客户周一分早晚两次在门店购买了6件商品,分别是中性笔、荧光笔、订书机、中性笔、胶水、计算器,这里有重复的商品中性笔,我们可以借助集合删除该重复值,代码如下:
order_mon = {'中性笔','荧光笔','订书机','中性笔','胶水','计算器'} order_mon
输出结果如下:
{'中性笔', '胶水', '荧光笔', '计算器', '订书机'}
运行上述代码,可以看出已经删除了重复值,只保留了5种不同类型的商品名称。
集合的元素是无序的,因此打印输出的时候也是无序的。
例如,上述客户周三在门店购买了4件商品,分别是订书机、胶水、笔筒、会议牌,代码如下:
order_wed = {'订书机','胶水','笔筒','会议牌'} order_wed
输出结果如下:
{'会议牌','胶水', '笔筒', '订书机'}
我们还可以快速判断某个元素是否在某集合中,例如,判断该客户周一是否购买了“计算器”,代码如下:
'计算器' in order_mon
输出结果如下:
True
此外,Python中的集合与数学中的集合概念基本类似,也有交集、并集、差集和补集。
1.集合的交集
例如,统计上述客户周一和周三都购买的商品,代码如下:
order_mon & order_wed
输出结果如下:
{'胶水', '订书机'}
图2-1 集合间的关系
2.集合的并集
例如,统计该客户周一和周三购买的商品,代码如下:
order_mon | order_wed
输出结果如下:
{'中性笔', '会议牌', '笔筒', '胶水', '荧光笔', '计算器', '订书机'}
3.集合的差集
例如,统计该客户在周一和周三不同时购买的商品,代码如下:
order_mon ^ order_wed
输出结果如下:
{'中性笔', '会议牌', '笔筒', '荧光笔', '计算器'}
4.集合的补集
例如,统计该客户周一购买,而周三没有购买的商品,代码如下:
order_mon - order_wed
输出结果如下:
{'中性笔', '荧光笔', '计算器'}
2.1.6 字典
与列表、元组、集合类似,字典(Dictionary)也是一种可变容器,且可存储任意类型的对象。字典的每个键−值对用冒号分隔,每个键−值对之间用逗号分隔,整个字典包括在花括号中,格式如下:
dict = {key1:value1, key2:value2}
注意,键−值对中的键必须是唯一的,但是值可以不唯一,且数值可以取任意数据类型,但键必须是不可变的,例如创建3个字符串或数字字典,代码如下:
dict1 = {'客户数量': 91} dict2 = {'客户数量': 91, 2023:6} dict3 = {'客户姓名':'张三','客户性别':'男','联系电话':18966666666,'联系地址':'东方路 666号'}
运行上述代码,创建的字典输出如下:
dict1 {'客户数量': 91} dict2 {'客户数量': 91, 2023: 6} dict3 {'客户姓名': '张三', '客户性别': '男', '联系电话': 18966666666, '联系地址': '东方路666号'}
在Python中,访问字典中的值需要把相应的键放入方括号中,例如获取客户的联系地址,代码如下:
dict3['联系地址']
输出结果如下:
'东方路666号'
在Python中,当访问字典中的值时,如果字典中没有该键,那么程序会报错,代码如下:
dict3['客户年龄']
会输出如下的错误信息:
-------------------------------------------------------------------------- KeyError Traceback (most recent call last) Cell In[18], line 1 ----> 1 dict3['客户年龄'] KeyError: '客户年龄'
在Python中,还可以向已有字典中添加新内容,方法是增加新的键−值对,也可以修改字典已有键−值对中的值,例如,向字典dict2中添加键“客户年龄”,并修改键“2023”中的值为8,代码如下:
dict2['客户年龄'] = 29 dict2[2023] = 8 dict2
输出结果如下:
{'客户数量': 91, 2023: 8, '客户年龄': 29}
在Python中,能够删除字典中的单一元素,也能清空和删除字典,例如要删除字典dict2中的键“2023”,然后清空字典,最后删除字典。输入代码如下:
del dict2[2023] dict2
输出结果如下:
{'客户数量': 91, '客户年龄': 29}
可以使用clear()方法清空字典,代码如下:
dict2.clear() dict2
输出结果如下:
{}
使用del()方法删除字典后,再调用该字典,将会显示字典没有被定义的报错信息,代码如下:
del dict2 dict2
会输出如下错误信息:
-------------------------------------------------------------------------- NameError Traceback (most recent call last) Cell In[28], line 1 ----> 1 dict2 NameError: name 'dict2' is not defined