Python 作为一种脚本语言, 其要求强制缩进, 使其易读, 美观, 它的数据类型可以实现自动转换, 而不需要像 C,Java 那样给变量定义数据类型, 使其编写非常方便简单, 所以广受大家的欢迎.
现如今, Python 已经广泛的应用于数据分析, 数据挖掘, 机器学习等众多科学计算领域. 所以既然涉及到科学计算, 深入了解 Python 原生提供的数据结构是很有必要的, 这样才能在数据的海洋中游刃有余, 得心应手. 本文便以此展开, 做一个归纳整理, 方便收藏.
Python
一, 序列结构
首先介绍的数据结构是序列结构, 所谓序列, 也就是元素顺序是很重要的, 不同元素顺序的序列是不同的序列. Python 中含有六种内建的序列结构, 分别是 list,tuple,string,unicode,buffer,xrange.
1.1,list(列表)
list, 列表是一种序列, 可以看做是一种数组, 但不同的于其它语言的是, Python 列表中的元素可以是任何数据类型, 诸如, 数字, 字符串等等.
下面为创建 list 结构的几种方式:
- //1. 通过中括号括起已知的元素创建 list
- mylist = ['orange', 'apple', 1,2,3.14];
- //2. 通过中括号创建空 list, 然后用 append()追加动态元素
- mylist = [];
- mylist.append('orange');
- //3. 通过 list()方法创建空 list
- mylist = list();
选取 list 元素的方法:
- // 通过中括号加下对应下标选取, 下标从 0 开始,-1 为倒数第一个元素, 以此类推
- mylist[0];
- mylist[-1];
切片是 Python 中序列结构独有的一种操作, 意思是从序列中选取一个子序列, 凡是序列均可切片, list 是序列, 所以 list 可以切片. 切片方法:
- // 通过 [begin:end] 方式完成切片
- mylist = [1,2,3,4,5];
- mylist[0:2]; // 生成的序列为[1,2,3]
list 常用方法:
list.append(x), 在列表的末尾添加一个元素.
list.insert(i, x), 在给定的位置插入一个元素, 第一个参数是要插入的元素的索引.
list.remove(x), 移除列表中第一个值为 x 的元素, 如果没有这样的元素, 则抛出异常.
list.clear(), 删除列表中所有的元素.
list.index(x), 返回列表中第一个值为 x 的元素的从零开始的索引, 如果没有这样的元素, 则抛出异常.
list.count(x), 返回元素 x 在列表中出现的次数.
list.reverse(), 反转列表中的元素.
机器学习
1.2,tuple(元组)
tuple, 元组和列表一样, 都以看做是一种数组, 元素可以是任何数据类型, 甚至可以嵌套. 唯一的区别是, 元组内的元素一旦创建, 是不可修改的, 也不可追加. 并且元组使用小括号创建, 同样元组可切片, 切片方法同 list.
- //1. 通过小括号括起已知的元素创建 tuple
- mytuple = (1, 3, 'hello!')
- //2. 不可以用 append()往 tuple 追加, 因为 tuple 一旦创建, 不可变更
获取 tuple 中的元素:
- // 和列表一样, 通过中括号加下对应下标选取, 下标从 0 开始,-1 为倒数第一个元素, 以此类推
- mytuple[0];
- mytuple[-1];
- 1.3,string,unicode,buffer,xrange
这四个也是序列, 做科学计算由于不太常用, 不做太多介绍.
string 可以看成是少量单个字符构成的 list, 如:
- mystring = 'orange';
- mylist = ['o','r','a','n','g','e'];
由于 string 也是序列, 所以也可以切片, 切片就当做单个字符构成的 list 切片即可, 很多原理类似, 不做过多介绍.
unicode 和 string 类似, 不过可以支持原生 unicode 编码的序列, 如 \\u4f60\\u597d.
buffer 可以看成大量字符构成的 list.
xrange 可以看成纯数字构成的 list.
科学计算
二, 散列结构
所谓散列结构, 区别于上述序列结构, 散列结构中, 元素顺序是不重要的, 顺序不同的散列, 还是同一个散列. 散列结构有 set,dict.
2.1,set(集合)
set, 集合, 集合是由不重复元素组成的无序的集, 重点是不重复, 和数学中的集合类似. 无序是散列结构的特点, 集合是一种散列结构, 所以集合也有无序的特点.
创建 set 的方法:
- // 和 list 很类似, 可对应参考
- //1. 通过大括号括起已知的元素创建 set
- myset = {
- 'red','blue',2.71
- };
- //2. 通过 set()方法创建空 set, 注意不能用 {
- } 创建空 set, 这样创建的是空 dict
- //3. 然后用 add()添加动态元素, 注意不是 append
- myset = set();
- myset.add('yellow');
Python 的 set 集合可以支持并集, 交集, 差集, 对称差等数学运算:
- // 创建集合 a
- a = set('abracadabra');
- // 创建集合 b
- b = set('alacazam');
- ------------------
- print(a)
- // 结果:{
- 'a', 'r', 'b', 'c', 'd'
- }
- ------------------
- print(a - b); // 差集
- // 结果:{
- 'r', 'd', 'b'
- }
- ------------------
- print(a | b); // 并集
- // 结果:{
- 'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'
- }
- ------------------
- print(a & b); // 交集
- // 结果:{
- 'a', 'c'
- }
- ------------------
- print(a ^ b); // 对称差
- // 结果:{
- 'r', 'd', 'b', 'm', 'z', 'l'
- }
set 常用方法:
set.remove(x), 移除集合中值为 x 的元素, 如果没有这样的元素, 则抛出异常.
set.isdisjoint(set2), 判断两个集合是否包含相同的元素, 如果没有返回 True, 否则返回 False.
set.issubset(set2), 判断集合 set 是否包含于 set2
set.issuperset(set2), 判断集合 set 是否包含 set2,issubset 与 issuperset 是一对互逆操作.
2.2,dict(字典)
dict, 字典, 字典由键值对组成, 具有唯一性, 可变性. 字典是可变对象但字典的键的唯一的, 是不可变对象. 理解字典的最好方式, 就是将它看做是一个 键 : 值对的集合.
创建 dict 的方法:
- //1. 通过大括号括起键值对创建 dict
- mydict = {
- 'name':'tom','age':'24'
- };
- //2. 通过 dict()方法创建 dict
- mydict = dict(name = 'tom',age = 24);
- //3. 通过大括号创建空 dict, 然后通过中括号添加键值对
- mydict = {
- };
- mydict['tel'] = '1300000000';
获取 dict 中的元素:
- // 需要已经知道键的名称, 否则无法获取, 除非遍历
- mydict.get('tel');
dict 常用方法:
dict.copy(), 拷贝出一个新的字典.
dict.setdefault({'sex':'man'}), 有则查, 无则增.
dict.update({'sex':'male'}), 有则改, 无则增.
dict.pop('tel'), 指定删除, 参数必须要有需要删除的键.
dict.clear(), 清空字典.
dict.keys(), 查询字典中所有的键.
dict.values(), 查询字典中所有的值.
dict.items(), 查询字典中所有的键值对.
以上即为 Python 自带的数据结构, 共分为序列结构和散列结构两大类, 序列结构有 list,tuple,string,unicode,buffer,xrange, 散列结构有 set,dict.
来源: http://developer.51cto.com/art/201908/602003.htm