Python数据结构
昨天简单的介绍了一下Python中常用的一些内建(build-in)的数据结构,今天举一些具体的例子,并对这些数据结构的API做一个简单的说明。
list
1 | # 初始化空list,也可以是 a = [] |
复制操作需要特别说明一下,这里备份list不能直接用等号,而要调用copy方法进行,不然仅仅是引用,内存地址不会发生变化,
例如若b = a,改变b中元素的值,a中的对应位置的值也会发生变化。甚至切片方式(括号[]中1:6:2就是一种切片)赋值也是不行的。
另外在Python中这些数据类型指标index都是从0开始的,这里类此C/C++。
tuple
tuple中只有两个方法count和index并和list中的用法相同,这里不再赘述。但是tuple可以有一些其他的用途。
1 | # 交换两个元素的值 |
需要注意的是在定义一个元素的tuple的时候,需要加上一个逗号在后面。
1 | a = 1, # a = (1,) |
前者定义了一个单元素元组,后者仅仅是一个变量,因为后者中的括号只是为了限定算数运算顺序而加的,这里特别需要注意。
另外tuple是有序的,即(1,2)和(2,1)不等价(两者的hash值不同)。
dict
1 | # 初始化空字典,也可以用a = {} |
dict是利用hashmap实现,从而查找键值的速度很快,另外需要注意的是dict是一种无序的字典,在collections中的OrderedDict是有序字典。
推荐LeetCode中的第1题两数之和练习一下,利用dict会使得程序运行速度快很多。
set
set为不含有重复元素的集合
1 | # 初始化空集合 |
set的API有点多,而且大多从名字上就能看出是用来做什么的,这里不再赘述。
另外类似类似set的Counter可以保留元素的个数信息,也需要通过collections导入。
推荐LeetCode中的第349和350题,两个数组的交集。
写在最后:
关于在循环中如何迭代这些数据类型,将在下一次进行说明。
有zip、enumerate以及itertools中的各种迭代器。利用这些语句可以使得循环遍历变得方便。