
2.1 Python数据类型
2.1.1 数值(Number)
Python中的数值类型用于存储数值,主要有整数类型(int)和浮点型(float)两种。需要注意的是,数值类型变量的值是不允许被改变的,如果改变数值类型变量的值,则会重新分配内存空间。例如,数据分析师小王统计汇总今天商品总的订单量是899件,输入代码如下:

但是,领导需要的不是总的订单量,而是商品的有效订单量。由于还有部分客户购买商品后又进行了退单(共计8件退单),因此需要减去8件退单,输入有效订单量的代码如下:

运行上述代码后,现在变量order_volume的数值就是有效商品的订单量891件,而不再是前面输入的899件,代码如下:

代码输出结果如下所示。

Python中有丰富的函数,包括数学函数、随机数函数、三角函数等,表2-1列举了一些常用的数学函数。
表2-1 常用的数学函数

下面通过案例介绍数学函数的用法,例如,我们要返回数值-12.439的整数部分和小数部分。Python数学运算的常用函数基本都在math模块中,因此首先需要导入math模块,然后使用modf()函数提取整数部分和小数部分。
通过下面代码可以看出:-12.439的小数部分是-0.43900000000000006,整数部分是-12.0。

代码输出结果如下所示。

注意:这里小数部分不是-0.439。这是由于Python默认的是数值计算,而不是符号计算,其中数值计算是近似计算,而符号计算则是绝对精确的计算,这里就不再详细介绍两者之间的差异,如果读者想深入了解,那么可以查阅相关的资料。
2.1.2 字符串(String)
字符串是Python最常用的数据类型。我们可以使用英文输入法下的单引号('')或双引号("")来创建字符串,字符串可以是英文、中文或中文英文的混合。例如,创建两个字符串str1和str2,代码如下:

查看字符串str1,代码如下:

代码输出结果如下所示。

查看字符串str2,代码如下:

代码输出结果如下所示。

在Python中,可以通过“+”实现字符串之间的拼接,输入以下代码:

查看字符串str3,代码如下:

代码输出结果如下所示。

在字符串中,我们可以通过索引获取字符串中的字符,遵循“左闭右开”的原则。需要注意的是,索引是从0开始的。例如,截取字符串str1的前5个字符,代码如下:

或者

代码输出结果如下所示。

我们可以看出,程序输出字符串str1中的前5个字符“Hello”,索引分别对应0、1、2、3、4。原字符串中每个字符所对应的索引号如表2-2所示。
表2-2 字符串索引号

此外,还可以使用反向索引,实现上述同样的需求,但是索引位置会有变化,分别对应-13、-12、-11、-10、-9,代码如下:

代码输出结果如下所示。

同理,我们也可以截取原字符串中的“Python”子字符串,索引的位置是6~12(包含6但不包含12),代码如下:

代码输出结果如下所示。

Python提供了方便灵活的字符串运算,表2-3列出了可以用于字符串运算的运算符。
表2-3 字符串运算符

续表

下面以成员运算符为例介绍字符串运算符。例如,我们需要判断“Python”是否在字符串变量str1中,代码如下:

代码输出结果如下所示。

输出结果为True,即“Python”在字符串变量str1中,如果不存在则输出结果为False。
2.1.3 列表(List)
列表是最常用的Python数据类型,使用方括号表示,数据项之间使用逗号分隔。注意列表中的数据项不需要具有相同的类型。例如,创建3个企业商品有效订单的列表,代码如下:

运行上述代码创建3个列表,查看列表list1,代码如下:

代码输出结果如下所示。

查看列表list2,代码如下:

代码输出结果如下所示。

查看列表list3,代码如下:

代码输出结果如下所示。

列表的索引与字符串的索引一样,也是从0开始的,也可以进行截取、组合等操作。例如,我们从列表list3中截取索引从1到3,但不包含索引为3的字符串,代码如下:

代码输出结果如下所示。

可以对列表的数据项进行修改或更新,首先查看索引为1位置的数值,代码如下:

代码输出结果如下所示。

然后修改列表list1中索引为1位置的数值,如将其修改为“2019年”,代码如下:

代码输出结果如下所示。

可以使用del语句来删除列表中的元素,代码如下:

代码输出结果如下所示。

也可以使用append()方法在尾部添加列表项,代码如下:

代码输出结果如下所示。

此外,还可以使用insert()方法在中间添加列表项,代码如下:

代码输出结果如下所示。

2.1.4 元组(Tuple)
Python 的元组与列表类似,不同之处在于元组的元素不能被修改。需要注意的是,元组使用的是括号,而列表使用的是方括号。创建元组很简单,只需要在括号中添加元素,并使用逗号隔开即可。例如,创建3个企业商品有效订单的元组,代码如下:

运行上述代码创建3个元组,查看元组tup1,代码如下:

代码输出结果如下所示。

查看元组tup2,代码如下:

代码输出结果如下所示。

查看元组tup3,代码如下:

代码输出结果如下所示。

当元组中只包含一个元素时,需要在元素后面添加逗号,代码如下:

代码输出结果如下所示。

否则括号会被当作运算符使用,代码如下:

代码输出结果如下所示。

元组的索引与字符串的索引一样,也是从0开始的,也可以进行截取、组合等操作。例如,我们从元组tup3中截取索引从1到3,但不包含索引为3的元素,代码如下:

代码输出结果如下。

在Python中,也可以通过“+”实现对元组的连接,运算后会生成一个新的元组,代码如下:

代码输出结果如下所示。

元组中的元素是不允许被修改和删除的。例如,修改元组tup6中第4个元素的数值,代码如下:

运行上述代码,错误信息如下所示。

2.1.5 集合(Set)
集合是一个无序的不重复元素序列,可以使用花括号“{}”或set( )函数创建。需要注意的是,创建一个空集合,必须使用set( )函数,因为花括号“{ }”是用来创建一个空字典的。创建集合的语法格式如下:

或者

下面以客户购买商品为例介绍集合的去重功能。假设某客户在10月购买了6次商品,分别是纸张、椅子、器具、配件、收纳具、配件,这里有重复的商品,我们可以借助集合删除重复值,代码如下:

代码输出结果如下所示。

运行上述代码,可以看出已经删除了重复值,只保留了5种不同类型的商品名称。
同理,该客户在11月购买了4次商品,分别是装订机、椅子、器具、配件,代码如下:

代码输出结果如下所示。

可以快速判断某个元素是否在某个集合中。例如,判断该客户在10月是否购买了“配件”,代码如下:

代码输出结果如下所示。

此外,Python中的集合与数学上的集合概念基本类似,也有交集、并集、差集和补集,集合之间关系的思维图如图2-1所示。

图2-1 集合之间关系的思维图
集合的交集。例如,统计该客户在10月和11月所购买的重复商品,代码如下:

代码输出结果如下所示。

集合的并集。例如,统计该客户在10月和11月购买的所有商品,代码如下:

代码输出结果如下所示。

集合的差集。例如,统计该客户在10月和11月所购买的不重复商品,代码如下:

代码输出结果如下所示。

集合的补集。例如,统计该客户在10月购买,而在11月没有购买的商品,代码如下:

代码输出结果如下所示。

2.1.6 字典(Dictionary)
字典是另一种可变容器模型,并且可以存储任意类型对象。字典的每个“键”和“值”用冒号分隔,每个“键-值”对之间用逗号分隔,整个字典包括在花括号中,语法格式如下:

需要注意的是,“键-值”对中的键必须是唯一的,但是值可以不是唯一的,且数值可以取任何数据类型,但键必须是不可变的,如字符串或数字,代码如下:

运行上述代码,创建3个字典,查看字典dict1,代码如下:

代码输出结果如下所示。

查看字典dict2,代码如下:

代码输出结果如下所示。

查看字典dict3,代码如下:

代码输出结果如下所示。

在Python中访问字典里的值时,要把相应的键放入方括号中。例如,读取字典dict3中键为“order_north”的值,代码如下:

代码输出结果如下所示。

在Python中,如果字典里没有该键就会报错,代码如下:

输出错误信息如下所示。

在Python中,向字典添加新内容的方法是增加新的“键-值”对,修改已有“键-值”对,例如,向字典dict2中添加键“order_sales”,代码如下:

代码输出结果如下所示。

在Python中,既能够删除字典中的单一元素,也能够清空和删除字典。例如,首先删除字典dict2中的键“2020”,代码如下:

代码输出结果如下所示。

然后清空字典dict2,代码如下:

代码输出结果如下所示。

最后删除字典dict2,并查看字典dict2,代码如下:

代码输出结果如下所示,会报错提示字典没有被定义。
