Python其实很简单 第十章 字典与集合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python其实很简单 第十章 字典与集合相关的知识,希望对你有一定的参考价值。

参考技术A

前面介绍的列表和元组都是有序序列,而字典与集合属于无序序列,也就是说,不能通过索引来操作元素。

10.1 字典

语法格式:

dictionary= key1 : value1, key2 : value2, key3 : value3 ,...., key n : value n

其中,dictionary是字典名称,key表示元素的键,value表示元素的值,键和值必须是成对的。

如:

>>> dict1 = \'abc\': 123, 98.6: 37

>>> dict1

\'abc\': 123, 98.6: 37

可以看出,键可以是字符串、数字或者元组,但必须是唯一的;而值可以是任何数据类型,也没有要求是唯一的。

1、创建字典的方法

方法一:同时给定键和值,即“关键字参数”形式。

dictionary=dict(key1=value1,key2=value2,.....,key n=value n)

注意:这里的key 必须符合Python标识符的命名规则。

例:

先使用“”创建字典:

>>> dict1=1:\'一\',2:\'二\',3:\'三\',4:\'四\',5:\'五\'

>>> dict1

1: \'一\', 2: \'二\', 3: \'三\', 4: \'四\', 5: \'五\'

再通过“关键字参数”形式创建:

>>> dict1=dict(1=\'一\',2=\'二\',3=\'三\',4=\'四\',5=\'五\')

SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

创建不成功,原因在于key 不符合Python标识符的命名规则。前面已经介绍过,标识符不能用数字表示或者用数字打头。

现在对键如下修改:

>>> dict1=dict(n1=\'一\',n2=\'二\',n3=\'三\',n4=\'四\',n5=\'五\') #在数字前加了一个字符”n”

>>> dict1

\'n1\': \'一\', \'n2\': \'二\', \'n3\': \'三\', \'n4\': \'四\', \'n5\': \'五\'

方法二 :使用已经存在的元组和列表通过映射函数创建字典。

格式:dictionary=dict(zip(tuplekey,listvalue))

例:

>>> tuplekey=(\'n1\',\'n2\',\'n3\',\'n4\',\'n5\') #键的序列采用元组

>>> listvalue=[\'一\',\'二\',\'三\',\'四\',\'五\'] #值的序列采用列表

>>> dict1=dict(zip(tuplekey,listvalue))

>>> dict1

\'n1\': \'一\', \'n2\': \'二\', \'n3\': \'三\', \'n4\': \'四\', \'n5\': \'五\'

注意:tuple(listname)函数可以将列表转换为元组,list(tuplename)函数可以将元组转换为列表。

2、通过键访问字典

直接获取键的相应元素的值

>>> dict1[\'n2\']

\'二\'

利用get()方法

>>> dict1.get(\'n2\')

\'二\'

get()方法也可以带参数,当要访问的键不存在时返回一个字符串。如:

>>> dict1.get(\'n0\',\'can\'t find!\') #当要查找的键不存在,返回\'can\'t find!\'

"can\'t find!"

3、遍历字典

使用字典对象的items()方法可以获取字典的“键.值对”列表。

>>> for item in dict1.items():

print(item)


(\'n1\', \'一\')

(\'n2\', \'二\')

(\'n3\', \'三\')

(\'n4\', \'四\')

(\'n5\', \'五\')

也可以获取具体的每个元素的键和值,如:

>>> for key,value in dict1.items():

print(key,\'对应的是\',value)


n1 对应的是 一

n2 对应的是 二

n3 对应的是 三

n4 对应的是 四

n5 对应的是 五

4、添加、修改和删除字典元素

使用下面的语句,若指定的键存在,就可以修改该元素的值;若指定的键不存在,则添加该元素。如:

>>> dict1[\'n6\']=\'六\' # 键’n6’不存在,故添加该元素

>>> dict1

\'n1\': \'一\', \'n2\': \'二\', \'n3\': \'三\', \'n4\': \'四\', \'n5\': \'五\', \'n6\': \'六\'

>>> dict1[\'n4\']=\'肆\' # 键’n4’存在,故修改该元素

>>> dict1

\'n1\': \'一\', \'n2\': \'二\', \'n3\': \'三\', \'n4\': \'肆\', \'n5\': \'五\', \'n6\': \'六\'

5、利用推导式建立字典

import random

dict1=i:random.randint(1,100) for i in range(5)

# 生成元素的键为0到5整数,值为1到100之间的随机数

print(dict1)

运行结果:0: 28, 1: 59, 2: 79, 3: 30, 4: 88

10.2 集合

集合是数学中一个很重要的概念,集合具有确定性、互异性、无序性三个基本属性。在Python中,集合同样具有这三个基本属性,其中,确定性是指对象要么是集合的元素,要么不是集合的元素;互异性是指集合中的元素不能重复;无序性是指集合中的元素不分先后次序,可以随意更换位置。

1、集合的创建

直接使用“”创建

>>> set1=\'春\',\'夏\',\'秋\',\'冬\'

>>> set1

\'秋\', \'春\', \'冬\', \'夏\'

>>> set2=3,2,1,4,5

>>> set2

1, 2, 3, 4, 5

利用已有的列表、元组创建集合

>>> list1=[\'东\',\'南\',\'西\',\'北\']

>>> set3=set(list1)

>>> set3

\'南\', \'东\', \'北\', \'西\'

利用已有的集合建立一个“副本”

>>> set3

\'南\', \'东\', \'北\', \'西\' #set3和set4的值一样

>>> set4=set3

>>> set4

\'南\', \'东\', \'北\', \'西\'

>>> set4.add(\'中\') #给set4添加元素

>>> set4

\'西\', \'中\', \'东\', \'南\', \'北\' # 这个好理解

>>> set3

\'西\', \'中\', \'东\', \'南\', \'北\' # 意想不到吧?Set3为什么会发生变化?

再看看简单变量的情况:

>>> a=2

>>> b=a #是不是与前面set4=set3相似

>>> b+=1

>>> b

3

>>> a

2 #但a的值并没有发生改变

从上面集合set3、set4和简单变量a、b的值的变化情况对比,不难发现set3和set4是指向同一地址的对象,而变量a和变量b指向了不同地址,语句b=a是将a的值传递个b,并不是将a的地址传递给b。列表、元组、字典都和集合一样具有这样的性质。

所以,将set4称为set3的“副本”更为恰当。

2、添加和删除元素

>>> set3

\'南\', \'东\', \'北\', \'西\'

>>> set3.add(\'中\') # 添加元素

>>> set3

\'西\', \'中\', \'东\', \'南\', \'北\' # 集合内的元素是无序的,不要纠结次序的变化

>>> set3.remove(\'中\') # 删除元素

>>> set3

\'西\', \'东\', \'南\', \'北\'

3、集合运算

集合运算包括交(&)、并(|)、差(-),和数学中的集合运算是一致的。

>>> set3=\'南\', \'东\', \'北\', \'西\'

>>> set4=\'西\', \'中\', \'东\', \'南\', \'北\'

>>> set3 & set4 #取set3和set4的交集

\'西\', \'南\', \'北\', \'东\'

>>> set3 | set4 #取set3和set4的并集

\'中\', \'南\', \'北\', \'西\', \'东\'

>>> set3 - set4 #取set3与set4的差,即set3比set4多出来的元素

set()

>>> set4 -set3 #取set4与set3的差,即set4比set3多出来的元素

\'中\'

Python的集合与字典练习

  集合与字典练习

  question1

  问题描述:有一个列表,其中包括 10 个元素,例如这个列表是[1,2,3,4,5,6,7,8,9,0],要求将列表中的每个元素一次向前移动一个位置,第一个元素到列表的最后,然后输出这个列表。最终样式是[2,3,4,5,6,7,8,9,0,1]

  代码如下:

  list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

  print(list)

  a = list.pop(0)

  list.append(a)

  print(list)

  结果如下图:

  

技术图片

 

  question2

  问题描述:按照下面的要求实现对列表的操作:

  1). 产生一个列表,其中有 40 个元素,每个元素是 50 到 100 的一个随机整数

  2). 如果这个列表中的数据代表着某个班级 40 人的分数,请计算成绩低于平均分的学生人数

  3). 对上面的列表元素从大到小排序并输出li.sort(reverse=True)

  import random

  # 定义一个空列表

  list = []

  for i in range(40):

  list.append(random.randint(50, 100))

  # 计算平均分

  allScore = 0

  for score in list:

  allScore = allScore + int(score)

  averScore = allScore/40

  print(averScore)

  flag = 0

  for score in list:

  if score < averScore:

  flag += 1

  print(flag)

  list.sort(reverse=True)

  print(list)无锡妇科哪家好 http://www.xasgyy.net/

  结果如下图:

  

技术图片

 

  question3

  问题描述:

  如果将一句话作为一个字符串,那么这个字符串中必然会有空格(这里仅讨论英文),比如"How are you.",但有的时候,会在两个单词之间多大一个空格。现在的任务是,如果一个字符串中有连续的两个空格,请把它删除。

  s = ‘How are you ‘

  word = s.split()

  new_s = " ".join(word)

  print(new_s)

  结果:

  

技术图片

以上是关于Python其实很简单 第十章 字典与集合的主要内容,如果未能解决你的问题,请参考以下文章

python 从入门到实践 第十章试一试

python基础学习笔记——Python基础教程(第2版 修订版)第十章(充电时刻)

Python 编程快速上手 让繁琐工作自动化-第十章实践项目 10.8 调试硬币抛掷

oracle_体系 第十章 数据字典

第十章 Python常用标准库使用(必会)

《python for data analysis》第十章,时间序列