Python一共有三大数据结构,分别是tuple元组、list数组以及dict字典
目录
一 数组
二 元组
三 字典
一 数组
数组是一个有序的集合,他用方括号表示
a 就是一个典型的数组,数组不限定其中的数据类型,可以是整数也可以是字符串或者混合型数组可以直接用特定的函数,其函数名与Excel相近
sum 是求和,len 则是统计数组中的元素个数
上述列举的函数是数组内整体元素的应用,如果我只想针对单一的元素呢?比如查找,这里就要用到数组的特性,索引。索引和 SQL 中的索引差不多,都是用来指示数据所在位置的逻辑指针。数组的索引便是元素所在的序列位置
索引位置是从 0 开始算起,a[0]指数组的第一个元素,a[1]指数组的第二个元素。 len()计算出了数组元素个数是 5,那么它最后一个元素的索引是 4,负数表示,意为从最后一个数字计算索引
a[4]等价于 a[-1],a[-2]则指倒数第二个的元素
Python 中,用:表示范围
a[0:3]筛选了前三个元素,方括号左边是闭区间,右边是开区间,所以这里是a[0],a[1]和 a[2],并不包含a[3],这个方法叫做切片
[0:]表示从第 0 个索引开始,直到最后一个元素,[:3]表示从第一个元素开始,直到第 3 个索引
[-1:]表示从最后一个元素开始,因为它已经是最后一个元素了,所以只返回它本身,[:-1]表示从第一个元素开始到最后一个元素,a[-2:-1]和a[-3:-1]大同小异
数组的增删查
数组通过 insert 函数插入,函数的第一个参数表示插入的索引位置,第二个表示插入的值
另外一种方式是 append,直接在数组末尾添加上元素,它在之后讲到迭代和循环时应用较多
如果要删除特定位置的元素,用 pop 函数。如果函数没有选择数值,默认删除最后一个元素,如果有,则删除数值对应索引的元素
更改元素不需要用到函数,直接选取元素重新赋值即可
如果现在有一份数据是关于学生信息,一共有三个学生,要求包含学生的姓名,年龄,和性别,应该怎么用数组表示?
一是用三个一维数组分别表示学生的姓名,年龄和性别
学生属性被拆分成多个数组,利用索引来表示其信息,这里的索引有些类似 SQL的主键,通过索引查找到信息。但是这种方法并不直观,实际应用会比较麻烦,更好的方法是表示成多维数组
所谓多维数组,是数组内再嵌套数组,图中表示的是一个宽度为 3,高度为 3 的二维数组。此时 student[0]返回的是数组而不是单一值。这种方法将学生信息合并在一起,比第一个案例更容易使用
如果想选择第一个学生的性别,应该怎么办呢?
快速创建一个多维数组
[0]*3 将快速生成 3 个元素值为 0 的数组,这是一种快捷操作,而[row]*4 则将其扩展成二维数据,因为是 4,所以是 3*4 的结构
当我们想更改多维数组中的某一个元素而不是数组时,这种方式会错误
按照正常的想法,martix[1][0]将会改变第二个数组中的第一个值为 1,但是结果是所有数组的第一个值都变成 1。这是因为在 matrix = [row] * 4 操作中,只是创建 3 个指向 row 的引用,可以简单理解成四个数组是一体的。一旦其中一个改变,所有的都会变
比较稳妥的方式是直接定义多维数组,或者用循环间接定义。多维数组是一个挺重要的概念,它也能直接表示成矩阵,是后续很多算法和分析的基础
二 元组
tuple 叫做元组,它和数组非常相似,不过用圆括号表示。但是它最大的特点是不能修改
当我们想要修改时会报错
选择和数组没有差异
元组可以作为简化版的数组,因为它不可更改的特性,很多时候可以作为常量使用,防止被篡改
三 字典
字典 dict 全称 dictionary,以键值对 key-value 的形式存储。所谓键值,就是将 key作为索引存储,用大括号表示
图中的'qinlu'是 key,18 是 value 值。key 是唯一的,value 可以对应各种数据类型。key-value 的原理不妨想象成查找字典,拼音是 key,对应的文字是 value(当然字典的拼音不唯一)
字典和数组的差异在于,因为字典以 key 的形式存储和查找,所以它的查询速度非常快,毕竟翻字典的时候你只要知道拼音就能快速定位了。对 dict 数据结构,10 个 key 和 10 万个 key 在查找对应的 value 时速度没有太大差别
这种查找方式的缺点是占用内存大。数组则相反,查找速度随着元素的增加逐渐下降,这个过程想象成程序在一页页的翻一本没有拼音的字典,直到找到内容。数组的优点是占用的内存空间小
所以数组和字典的优缺点相反,dict 是空间换时间,list 是时间换空间,这是编程中一个比较重要的概念。实际中,数据分析师的工作不太涉及工程化,选用数组或者字典没有太严苛的限制
既然字典通过 key-value 对匹配查找,那么它自然不能不用数组的数值索引,它只能通过 key 值
如果 key 不存在,会报错。通过 in 方法,可以返回 True 或 False,避免报错
dict 和 list 一样,直接通过赋值更改 value,key 一旦确定,就无法再修改,dict 中删除 key 和 list 一样,通过 pop 函数。增加 key 则是直接赋予一个新的键值对
dict 的 keys 和 values 两个函数直接输出所有的 key 值和 value 值。如果要转换成数组,则再外面嵌套一个 list 函数
items 函数,将 key-value 对变成 tuple 形式,以数组的方式输出
字典可以通过嵌套应用更复杂的数据格式