友情提示:同学您好,此页面仅供预览,在此页面学习不会被统计哦! 请进入学习空间后选择课程学习。

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:随机数去重排序