python教材答案字典与集合_[19] Python集合与字典

1. 概述

今天介绍集合和字典。计算机编程的原理简要介绍

集成开发环境PyCharm

变量名、数字、字符串、列表

句式、注释

输入和输出

条件判断语句

循环语句

各类数据结构

函数

模块和引入

2. 集合

集合(set)就是我们高中学的集合,并集、交集、补集、空集等,用大括号表示。

# Define sets

set1 = {10, 20, 30, 40}

set2 = {20, 50, 60}

由于是集合,不会出现一样的元素(可以定义进去,但是相同数据会被合并),如果我们定义一个:

set3 = {10, 10, 20, 20, 'apple', 'banana', 'apple', }

print(set3) # {'apple', 10, 20, 'banana'}

最后等同于{'apple', 10, 20, 'banana'}。可以看到,最后由于集合的特点,重复的元素被合并,而且集合里面元素也没有顺序,和数学课里学的一样,集合三特点:确定性、无序性、互异性。

我们来看一下如何使用集合实现各种操作,

# 1. 判断元素是否属于集合(x ∈ A):in

setA = {'apple', 'orange', 'banana'}

print('orange' in setA) # True

print('lemon' in setA) # False

# 2. 判断元素是否不属于集合(x ∉ A):not in

setA = {'apple', 'orange', 'banana'}

print('orange' not in setA) # False

print('lemon' not in setA) # True

# 3. 并集(A ∪ B): |

setA = {'apple', 'orange', 'banana'}

setB = {'apple', 'lemon', 'coconut'}

print(setA | setB) # {'banana', 'coconut', 'lemon', 'orange', 'apple'}

# 4. 交集(A ∩ B):&

print(setA & setB) # {'apple'}

# 5. 差集(A - B),在A中但不在B中的元素集合:-

print(setA - setB) # {'orange', 'banana'}

# 6. 子集(C ⊆ A)貌似应该是“真子集”:<

setC1 = {'apple', 'banana'}

setC2 = {'apple', 'strawberry'}

print(setC1 < setA) # True

print(setC2 < setA) # False

# 7. 其他符号:

# 子集:<=

# 包含:>, >=

# 两集合相等:==

print({1, 2, 3} == {3, 1, 2, 1, 2}) # True

# 两集合不相等:!=

# 8. 空集:

empty = set()

# 注意不能只打一个大括号,一个空的大括号会被默认为一个空白字典。

3. 将其他数据转换为集合

如果想把其他数据转换为集合,只需要在数据或者代表数据的变量外套上set()就行了。

# 1. 将字符串和列表转换为集合

setS = set('banana')

print(setS) # {'a', 'n', 'b'}

setL = set(['apple', 'banana', 'orange', 'banana'])

print(setL) # {'orange', 'apple', 'banana'}

可以看到讲字符串转换为集合时,每个字符被作为一个元素,由于集合的互异性,重复字符会被合并,最后banana转换为集合后就只包含a、n、b三个字符。

# 2. update函数

# 用update()可以更新集合,把括号里的数据转换为集合再添加进去

setS = set('banana') # {'a', 'n', 'b'}

setS.update('banana!')

print(setS) # {'n', 'b', 'a', '!'}

# 最后比原来多了一个感叹号

# 3. add函数

# 用add()可以直接把括号里的元素作为一个整体添加进集合

setS = set('banana') # {'a', 'n', 'b'}

setS.add('banana!')

print(setS) # {'b', 'n', 'banana!', 'a'}

# 4. 集合的迭代,和列表、元组一样用

for e in setS:

print(e)

4. 字典

我们查字典的时候,比如成语字典,总是会看到这样的格式:成语-解释。Python的字典(dictionary)也是一样的道理,长相和功能和我们生活中的字典十分相似,但是可应用的地方可比普通字典多多了。Python的字典也用大括号表示,但是里面的内容和集合不一样,样子是“键:值”,用逗号隔开,最后一个元素后面可加逗号可不加。

# Define a dictionary

dict1 = {'NASA': 'National Aeronautics and Space Administration',

'FBI': 'Federal Bureau of Investigation',

'CIA': 'Central Intelligence Agency',

}

这个字典就可以被用于通过查询英文单词缩写来获知其全称。也就是说,冒号左边的“键”就是我们要查询的东西,而后面的“值”就是我们想要得到的解释和内容。和普通字典一样,键是唯一的、独特的,成语字典里一个成语不可能出现被解释多次,即使有多个意思,也是挤在同一个成语下面;而值则随便,就像两个不一样的成语可以有完全一样的意思。

字典的键得为不可变类型,比如数字、字符串和元组,值可以为任何数据类型,一般来说,字典的键需要越精简越好,可以是学号,可以是“姓名”、“性别”等字符串,或者是英文单词、成语等等,毕竟我们要访问字典的时候不想打一堆字,而且叫都叫字典了,也得要有个字典的样子。

5. 使用字典

我们来看一下如何访问字典、添加元素、修改元素和删除元素。

访问字典:使用“变量名[键]”可以直接得到值,

print(dict1['FBI']) # Federal Bureau of Investigation

如果键不存在,也就是我们自己做的字典里没有录进去,Python就会报错:

print(dict1['NATO']) # KeyError: 'NATO'

判断键是否有效:很多时候我们并不知道我们要查的内容是否在字典里,贸然使用肯定不行,那么在使用前我们最好能判断所查的键是否被编进字典了,用in就行了,和列表集合元组一样,

if 'NATO' in dict1:

print(dict1['NATO'])

else:

print('NATO has not been defined in your dictionary.')

# NATO has not been defined in your dictionary.

最后一行是运行上面代码输出的结果,我从运行结果里复制过来的。注意我们只能判断这个键是否存在在字典里,而不能判断某个值是否在字典了。

添加元素:有时候随着时间的推移、程序的运行,我们要更新一开始的字典,

dict1['NATO'] = 'North Atlantic Treaty Organization'

这样就把NATO和NATO的解释添加进字典了,是不是很暴力?如果不信我们可以输出一下试试看,

print(dict1)

# {'NASA': 'National...', 'FBI': 'Federal...', 'CIA': 'Central...', 'NATO': 'North Atlantic Treaty Organization'}

这个结果太长了,我手动把一些内容用省略号表示了,意思达到了就行,NATO被成功添加进字典。

删除字典:使用del可以删除单个元素,要删除多个元素,用逗号隔开就行,

del dict1['NATO'], dict1['NASA']

print(dict1)

# {'FBI': 'Federal Bureau of Investigation', 'CIA': 'Central Intelligence Agency'}

如果删除的元素本身就不在字典里,Python就会报错。

清空字典:clear就行,简单粗暴,

dict1.clear()

print(dict1) # {}

到这里我们辛辛苦苦定义、修改的字典就全没了。

字典的迭代:由于字典也是有一串数据,虽然严格意义上字典没有顺序,我们依然可以像集合一样进行迭代,

dict2 = {'name': 'Alice', 'gender': 'Female', 'age': 19}

for key in dict2:

print("Applicant's {} is {}".format(key, dict2[key]))

结果为:

Applicant's name is Alice

Applicant's gender is Female

Applicant's age is 19

6. 其他的字典使用方法

我们还能这样定义一个字典,比如我们定义一个和上面dict2一样的字典:

dict3 = dict([('name', 'Alice'), ('gender', 'Female'), ('age', 19)])

如果我们的键都是简短的字符串,也就是单个单词或者连着的单词的时候,我们可以用关键词定义法:

dict4 = dict(name='Alice', gender='Female', age=19)

还有一些字典的函数,简单的有:

len(dict2): 字典dict2有几个元素,即一共有几个键

dict2.keys(): 查看dict2里所有的键,可以在外套一个list()把结果转换为列表

dict2.values(): 查看dict2里所有的值,可以在外套一个list()把结果转换为列表

dict2.items(): 查看dict2里所有的键和值,可以在外套一个list()把结果转换为列表,每个元素为一个元组

dict2.update(dict3): 将dict3添加进dict2里面,dict2被更新,如果有新增的元素则新增进dict2里,如果有重复的键则把dict3的键和值去覆盖dict2的

dict2.has_key(key): 相当于in,查看dict2里是否含有某一特定键

7. 复杂的程序

其实学到现在,我们已经基本接触了所有的数据结构,加上基础的条件判断和循环语句,可以说Python最简单的内容应该已经学完了,大家现在应该可以解决简单的问题。接下来我将会给大家介绍Python入门的最后一章节内容函数和模块。有了函数和模块,我们就可以写较为复杂的程序了,也是真正意义上的“完整程序”了。

另外,说到复杂的程序,我们也不可避免地要遇见复杂的数据结构,比如字典里面的值即有单个值、也可能是列表或者其他字典,或者比如二维、三维、多维矩阵,这我们在以后会逐渐接触到,复杂的数据结构使用方法和简单的数据结构一样,难点在于如何正确、有条不紊地处理。配合我们已经介绍的条件判断语句、循环语句、各种单个数据结构使用方法以及一些内置函数像len、type等,大家现在可以尝试着自己操作一下。不会的同学也不用着急,以后程序复杂起来了,我们自然也不得不撸起袖子跟它怼着干。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值