Python的数据结构
一. 认识Python数据结构Python有4个内建的数据结构,它们可以统称为容器(container),因为它们实际上是一些“东西”组合而成的结构,而这些“东西”,可以是数字、字符甚至列表,或是它们的组合。Python中的绝大部分数据结构可以被最终分解为三种类型:集合(Set),序列(Sequence),映射(Mapping)。这表明了数据存储时所需的基本单位,其重要性如同欧式几何公理之于...
一. 认识Python数据结构
Python有4个内建的数据结构,它们可以统称为容器(container),因为它们实际上是一些“东西”组合而成的结构,而这些“东西”,可以是数字、字符甚至列表,或是它们的组合。
Python中的绝大部分数据结构可以被最终分解为三种类型:集合(Set),序列(Sequence),映射(Mapping)。这表明了数据存储时所需的基本单位,其重要性如同欧式几何公理之于欧式空间。
1、集合是独立于标量,序列和映射之外的特殊数据结构,它支持数学理论的各种集合的运算。它的存在使得用程序代码实现数学理论变得方便。
2、序列是Python中最为基础的内建类型。它分为七种类型:列表、字符串、元组、Unicode字符串、字节数组、缓冲区和xrange对象。常用的是:列表(List)、字符串(String)、元组(Tuple)。
3、映射在Python的实现是数据结构字典(Dictionary)。作为第三种基本单位,映射的灵活使得它在多种场合中都有广泛的应用和良好的可拓展性。
二、Python数据结构之列表
1、列表的基本操作
all_list = [1,‘word’,{‘like’:‘pythom’},True,[1,2]]
all_list =list((1,‘word’,{‘like’:‘pythom’},True,[1,2]))
长度:len(all_list)
计数:all_list.count(‘word’)
下标:all_list.index(‘word’)
反转:all_list[::-1] 或者 all_list.reverse()
合并:list1+list2
重复:all_list * 3
判断元素是否存在:‘word’ in all_list
切片与索引:all_list[0]
all_list[-4]
all_list[1:4]
all_list[:3]
①、列表中每个元素都是可变的;
②、列表中的元素是有序的,每个元素对应一个位置;
③、列表可以容纳Python中的任何对象。
2、列表的增删改查
fruit = [1,‘word’,True,‘pear’]
month=[‘January’,‘February’,‘March’,‘April’]
增添
fruit.append(‘July’)
fruit.extend(month)
fruit.insert(1,‘grap’)
fruit.insert(-1,‘apple’)
删除
fruit.remove(‘grape’)
fruit.remove(fruit[0])
fruit.pop(2)
del fruit[0:2]
fruit.clear() # 清空
修改
fruit[0] = (‘orange’)
fruit2 = fruit.copy()
查找
fruit.index(‘pear’)
fruit[3]
3、列表内建函数
三、Python数据结构之元组
1、元组的概念
元组与列表和字符串一样,是序列的一种。而元组与列表的唯一不同的元组不能修改,元组和字符串都具有不可变性。列表的可变性可能更方便处理复杂问题,例如更新动态数据等,但很多时候不希望某些处理过程修改对象内容,例如敏感数据,这就需要元组的不可变性。
tup = (‘Google’, ‘Runoob’, 1997, 2000)
tup1 = (50,) # 元组中只包含一个元素时,要在元素后面添加逗号
长度:len(tup)
计数:tup.count(‘Google’)
下标:tup.index(‘Google’)
反转:tup[::-1]
合并:tup1+tup2
重复:tup * 3
判断元素是否存在:‘Google’ in tup
切片与索引:tup[0]
tup[1:4]
tup[:3]
元组解包:A,B,C,D=tup # 将元组中各元素分别赋值给对应变量
2、元组内建函数
四、Python数据结构之字典
1、字典的概念
字典(Dictionary)是基础数据结构映射(Mapping)的一种。序列是按照顺序来存储数据的,而字典是通过键存储数据。字典的内部实现是基于二叉树(Binary Tree)的,数据没有严格的顺序。字典将键映射到值,通过键来调取数据。如果键值本来是有序的,那么我们不应该使用字典,如映射:
直接用列表[‘A’,’B’,’C’]即可,字典的效率比列表差得多。但是在很多情形下,字典比列表更加适用。比如我们手机的通讯录(假设人名均不相同)可以使用字典实现,把人的名字映射到一个电话号码,由于名字是无序的,不能直接用一个列表实现,使用字典直接高效。
2、字典的增删改查
code = {‘BIDU’:‘Baidu’,‘SINA’:‘Sina’,‘YOKU’:‘Youku’}
code = dict([(‘BIDU’,‘Baidu’),(‘SINA’,‘Sina’),(‘YOKU’,‘Youku’)])
插入
code[‘QQ’] = ‘tengxun’
code.update({‘FB’:‘Facebook’,‘TSLA’:‘Tesla’})
删除
del code[‘FB’]
code_QQ = code.pop(‘QQ’)
code.clear() # 清空
修改(赋值)
code[‘YOJKU’] = ‘Yoku’
查找
code[‘FB’]
3、映射在Python的实现是数据结构字典
①、键-值成对出现;
②、键不能重复;
③、键不可更改,值可修改;
④、键来索引值。
4、字典的常用操作
code = {‘BIDU’:‘Baidu’, ‘SINA’:‘Sina’,‘YOKU’:‘Youku’}
len() 测量字典中,键值对的个数
len(code)
keys 返回一个包含字典所有KEY的列表
code.keys()
values 返回一个包含字典所有value的列表
code.values()
items 返回一个包含所有(键,值)元祖的列表
code.items()
has_key
code.has_key(key)如果key在字典中,返回True,否则返回False。
五、Python数据结构之集合
1、集合的概念
Python有一种特殊的数据类型称为集合。因为它既不是序列也不是映射类型,更不是标量。集合是自成一体的类型。集合是唯一的,不可变的对象是一个无序集合。
set1 = set([2,3,1,4,False,2.5,‘one’])
set2 = {‘A’,‘C’,‘D’,‘B’,‘A’,‘B’} # 创建可变集合
set3 = frozenset([3,2,3,‘one’,frozenset([1,2]),True]) # 创建不可变集合
集合能够通过表达式操作符支持一般的数学集合运算。这是集合特有的操作,序列和映射不支持这样的表达式。
2、集合的并集
由属于集合A或集合B的所有元素组成的集合,称为集合A和B的并集,数学表达式为A∪B={x|x∈A或x∈B}。在Python中可以使用符号“|”或者集合方法union函数来得出两个集合的并集。
A={‘足球’,‘游泳’,‘羽毛球’,‘乒乓球’}
B={‘篮球’,‘乒乓球’,‘羽毛球’,‘排球’}
A|B # 使用符号’|’获取并集
A.union(B) # 使用集合方法union函数获取并集
3.集合的交集
同时属于集合A和B的元素组成的集合,称为集合A和B的交集,数学表达式为A∩B={x|x∈A且x∈B}。可以利用符号“&”或者集合方法intersection函数来获取两个集合对象的交集。
A={‘足球’,‘游泳’,‘羽毛球’,‘乒乓球’}
B={‘篮球’,‘乒乓球’,‘羽毛球’,‘排球’}
A&B # 使用符号’&’获取交集
A.intersection(B) # 使用集合方法intersection函数获取交集
4、集合的差集
属于集合A而不属于集合B中的元素所构成的集合,称为集合A减集合B,数学表达式为A-B={x|x∈A,x∉B}。这个集合也称为集合A与集合B的差集。反过来,也有差集B-A={x|x∈B,x∉A}。在Python中可以简单地使用减号“-”来得到相应的差集,或者可以通过集合方法difference函数来实现。
A={‘足球’,‘游泳’,‘羽毛球’,‘乒乓球’}
B={‘篮球’,‘乒乓球’,‘羽毛球’,‘排球’}
A-B # 使用减号“-”来获取差集
A.difference(B) # 使用集合方法difference函数获取差集
5、集合的异或集
属于集合A或集合B,但不同时属于集合A和B的元素所组成的集合,称为集合A和B的异或集,其相当(A∪B)-(A∩B)。利用符号“^”或者集合方法symmetric_difference函数即可求出两个集合对象的异或集。
A={‘足球’,‘游泳’,‘羽毛球’,‘乒乓球’}
B={‘篮球’,‘乒乓球’,‘羽毛球’,‘排球’}
A^B # 获取异或集
A.symmetric_difference(B) # 使用集合方法symmetric_difference函数获取异或集
6、集合内建函数
更多推荐
所有评论(0)