12.1 引言
1、序列和散列
前面我们讨论了序列类型的数据,包括range、字符串、元组和列表等对象。序列是计算机中最重要的数据结构之一,其最本质的特征就是数据项(元素)在逻辑上按先后顺序排列,因此能够通过序号(索引值)访问每一元素,这给我们的数据处理带来了极大的方便。
与序列不同,计算机中还存在另外一种重要的数据结构:散列(hash)。从其中文名称可以看出,散列有打乱数据、无序排列的意思。散列实现的关键是哈希函数(hash function),它能够将数据随机散布到内存的某个区域中。正是这种随机性,可以让我们获得更高的检索性能。
2、字典和集合
Python语言提供了两种散列类型的数据:字典和集合。其中,字典被广泛应用于各种程序中,同时它也是构建Python语言的基石——模块的命名空间、实例的属性和函数的关键字中都可以看到字典的身影。
字典(dict):是一种以“ key:value”(键值对)作为元素的可变数据类型,其元素是无序的。Python中,字典常被称为映射类型,指的是将hash函数作用于key便能找到value,即像字典那样,选定某个字(key)后,就能找到它的解释(value)。由于字典采用散列的实现方式,元素的键必须是不可变类型(可散列的),且元素的键必须互不相同。
集合(set):由一系列元素组成,其元素是无序的且不可重复的。集合是可变类型,但其元素必须是不可变类型。与字典相比,可以将其看成一组键的集合。此外,Python中还有一种不可变的集合:forzenset。
12.2 字典的创建
Python中,字典的创建主要有三种方法:除将用冒号分开的键值对放入大括号{}内创建字典外[1],还可以使用dict()函数借助其他数据创建字典[2],或使用字典推导式创建字典[3]。
12.3 字典的基本操作
1、获取字典元素的值
2、修改元素的值和添加元素
3、删除字典元素
从字典中删除元素可以使用del语句[1] ,也可以使用pop方法[2]删除指定元素,并返回该元素的值,还可以使用popitem方法[3]删除最后一个元素,并返回该元素的元组形式,对象的clear方法[4]则可清空字典所有元素。
格式1:del <字典名>[key] 格式2:<字典名>.pop(key [,default])
格式3:<字典名>.popitem() 格式4:<字典名>.clear()
4、通过视图获取字典整体信息
视图:通常指这样的一种对象,它并不存储实际的数据,但通过它可以看到真实的数据。Python中,字典有三个方法:keys、values、items,分别返回字典中所有键的视图、所有值的视图和所有的键值对的视图。
格式: <字典名>.keys()
格式:<字典名>.values()
格式:<字典名>.items()
12.4 字典程序举例
示例1:查询省会
示例2:字典排序
12.5 集合的创建
Python中,集合的创建主要有三种方法:除将元素放入大括号{}内创建集合外[1],还可以使用set()函数其他数据创建集合[2],或使用集合推导式创建集合[3]。
12.6 集合的基本操作
使用集合对象的add方法可以在集合中添加一个元素。使用remove方法、discard方法和pop方法可以删除集合中的一个元素,使用clear方法则可以清空集合的元素。
格式1:<集合名>.add(x)
格式2:<集合名>.remove(x)
remove方法从集合中删除对象x;如果x不是集合的元素(x not in s),将引发 KeyError 异常。
格式3:<集合名>.discard(x)
如果 x 是集合中的元素,discard方法将从集合 中删除对象 x,如果集合中不存在x,discard方法不会报错,这与remove方法不同。
格式4:<集合名>.pop()
pop方法无参数,它会从集合中移除任意一个元素,并将被移除的元素作为返回值。如果集合为空,则会引发 KeyError异常。
格式5:<集合名>.clear()
12.7 集合的运算
1、集合的关系运算
当一个集合s中的元素包含集合t中的所有元素时,称集合s是集合t的超集,集合t是集合s的子集。当集合s与集合t中的元素相同时,称两集合等价。集合的关系运算如下表所示。
2、集合运算:并、交、差、对称差
12.8 编码规范3:换行
12.9 集合程序举例
示例1:猜年龄
示例2:随机数去重排序