一、集合的定义

set集合,是一个无序且不重复的元素集合。

集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键。集合支持用in和not in操作符检查成员,由len()内建函数得到集合的基数(大小), 用 for 循环迭代集合的成员。但是因为集合本身是无序的,不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值。

二、集合的创建

s = set()
s = {11,22,33,44}
*注:创建空集合时,只能用set(),如果用第二种方法s={},创建的实际上是一个空字典。
s = {}
print(type(s))
<class 'dict'>a=set('boy')
b=set(['y', 'b', 'o','o'])
c=set({"k1":'v1','k2':'v2'})
d={'k1','k2','k2'}
e={('k1', 'k2','k2')}
print(a,type(a))
print(b,type(b))
print(c,type(c))
print(d,type(d))
print(e,type(e))
执行结果如下:
{'o', 'b', 'y'} <class 'set'>
{'o', 'b', 'y'} <class 'set'>
{'k1', 'k2'} <class 'set'>
{'k1', 'k2'} <class 'set'>
{('k1', 'k2', 'k2')} <class 'set'>

三、集合的功能

  1 class set(object):
  2     """
  3     set() -> new empty set object
  4     set(iterable) -> new set object
  5
  6     Build an unordered collection of unique elements.
  7     """
  8     def add(self, *args, **kwargs): # real signature unknown
  9         """
 10         Add an element to a set,添加元素
 11
 12         This has no effect if the element is already present.
 13         """
 14         pass
 15
 16     def clear(self, *args, **kwargs): # real signature unknown
 17         """ Remove all elements from this set. 清楚内容"""
 18         pass
 19
 20     def copy(self, *args, **kwargs): # real signature unknown
 21         """ Return a shallow copy of a set. 浅拷贝  """
 22         pass
 23
 24     def difference(self, *args, **kwargs): # real signature unknown
 25         """
 26         Return the difference of two or more sets as a new set. A中存在,B中不存在
 27
 28         (i.e. all elements that are in this set but not the others.)
 29         """
 30         pass
 31
 32     def difference_update(self, *args, **kwargs): # real signature unknown
 33         """ Remove all elements of another set from this set.  从当前集合中删除和B中相同的元素"""
 34         pass
 35
 36     def discard(self, *args, **kwargs): # real signature unknown
 37         """
 38         Remove an element from a set if it is a member.
 39
 40         If the element is not a member, do nothing. 移除指定元素,不存在不保错
 41         """
 42         pass
 43
 44     def intersection(self, *args, **kwargs): # real signature unknown
 45         """
 46         Return the intersection of two sets as a new set. 交集
 47
 48         (i.e. all elements that are in both sets.)
 49         """
 50         pass
 51
 52     def intersection_update(self, *args, **kwargs): # real signature unknown
 53         """ Update a set with the intersection of itself and another.  取交集并更更新到A中 """
 54         pass
 55
 56     def isdisjoint(self, *args, **kwargs): # real signature unknown
 57         """ Return True if two sets have a null intersection.  如果没有交集,返回True,否则返回False"""
 58         pass
 59
 60     def issubset(self, *args, **kwargs): # real signature unknown
 61         """ Report whether another set contains this set.  是否是子序列"""
 62         pass
 63
 64     def issuperset(self, *args, **kwargs): # real signature unknown
 65         """ Report whether this set contains another set. 是否是父序列"""
 66         pass
 67
 68     def pop(self, *args, **kwargs): # real signature unknown
 69         """
 70         Remove and return an arbitrary set element.
 71         Raises KeyError if the set is empty. 移除元素
 72         """
 73         pass
 74
 75     def remove(self, *args, **kwargs): # real signature unknown
 76         """
 77         Remove an element from a set; it must be a member.
 78
 79         If the element is not a member, raise a KeyError. 移除指定元素,不存在保错
 80         """
 81         pass
 82
 83     def symmetric_difference(self, *args, **kwargs): # real signature unknown
 84         """
 85         Return the symmetric difference of two sets as a new set.  对称交集
 86
 87         (i.e. all elements that are in exactly one of the sets.)
 88         """
 89         pass
 90
 91     def symmetric_difference_update(self, *args, **kwargs): # real signature unknown
 92         """ Update a set with the symmetric difference of itself and another. 对称交集,并更新到a中 """
 93         pass
 94
 95     def union(self, *args, **kwargs): # real signature unknown
 96         """
 97         Return the union of sets as a new set.  并集
 98
 99         (i.e. all elements that are in either set.)
100         """
101         pass
102
103     def update(self, *args, **kwargs): # real signature unknown
104         """ Update a set with the union of itself and others. 更新 """
105         pass
106
107 源码

源码

基本功能:

  • 增加(add, update)
a=set('python')
a.add('tina')
print(a)
b=set('python')
b.update('tina')
print(b)
执行结果如下:
{'tina', 'o', 'p', 'n', 't', 'y', 'h'}
{'o', 'i', 'p', 'a', 'n', 't', 'y', 'h'}
##################
由以上代码可以看出,add是单个元素的添加,而update是批量的添加。输出结果是无序的,并非添加到尾部。

  • 删除(remove,discard,pop)
c={'p', 'i', 'h', 'n', 'o', 'y', 't'}
c.remove('p')
print(c)c={'p', 'i', 'h', 'n', 'o', 'y', 't'}
c.discard('p')
print(c)
c={'p', 'i', 'h', 'n', 'o', 'y', 't'}
c.pop()
print(c)
执行结果如下: {'i', 'h', 't', 'o', 'y', 'n'}
#####

当执行c.remove('p','i')和c.discard('p','i')时,报错:TypeError: remove() takes exactly one argument (2 given),说明remove和discard删除元素时都只能一个一个的删,同add对应。
#################################################################################
remove,pop和discard的区别:
discard删除指定元素,当指定元素不存在时,不报错;
remove删除指定元素,但当指定元素不存在时,报错:KeyError。
pop删除任意元素,并可将移除的元素赋值给一个变量,不能指定元素移除。

set的特有功能:

s1 = {0}
s2 = {i % 2 for i in range(10)}
s = set('hi')
t = set(['h', 'e', 'l', 'l', 'o'])
print(s.intersection(t), s & t)  # 交集
print(s.union(t), s | t)   # 并集
print(s.difference(t), s - t)  # 差集
print(s.symmetric_difference(t), s ^ t) # 对称差集
print(s1.issubset(s2), s1 <= s2) # 子集(被包含)
print(s1.issuperset(s2), s1 >= s2)   # 父集(包含)

执行结果如下:
{'h'} {'h'}
{'i', 'e', 'h', 'l', 'o'} {'i', 'e', 'h', 'l', 'o'}
{'i'} {'i'}
{'e', 'l', 'o', 'i'} {'e', 'l', 'o', 'i'}
True True
False Falses = {11,22,33}
t = {22,44}
print(s.isdisjoint(t))#(disjoint脱节的,)即如果没有交集,返回True,否则返回False
s.difference_update(t)#将差集覆盖到源集合,即从当前集合中删除和B中相同的元素
print(s)
执行结果如下:
False
{33, 11}s = {11,22,33}
t = {22,44}
s.intersection_update(t)#将交集覆盖到源集合
print(s)
执行结果如下:
{22}s = {11,22,33}
t = {22,44}
s.symmetric_difference_update(t)#将对称差集覆盖到源集合
print(s)
执行结果如下:
{33, 11, 44}

四、练习题

寻找差异:哪些需要删除?哪些需要新建?哪些需要更新?

#!/usr/bin/python
# -*- coding:utf-8 -*-
old_dict = {"#1": {'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 80},"#2": {'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 80},"#3": {'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 80},
}new_dict = {"#1": {'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 800},"#3": {'hostname': 'c1', 'cpu_count': 2, 'mem_capicity': 80},"#4": {'hostname': 'c2', 'cpu_count': 2, 'mem_capicity': 80},
}
new_set = set()
old_set = set()
for i in new_dict:new_set.add(i)
for j in old_dict:old_set.add(j)
new_add = new_set.difference(old_set)    #new_dict中有,old_dict中沒有
old_del = old_set.difference(new_set)    #old_dict中有,new_dict中沒有
update = new_set.intersection(old_set)    #old_dict和new_dict共同有的,需要把new_dict更新到old_dict中for k in new_add:old_dict[k] = new_dict[k]    #將new_dict中新增的內容添加到old_dict中
for v in old_del:del old_dict[v]    #將old_dict中失效的內容刪除
for m in update:old_dict[m] = new_dict[m]    #把new_dict更新到old_dict中print(old_dict)

转载于:https://www.cnblogs.com/LiCheng-/p/6430708.html

python基本数据类型——set相关推荐

  1. Python的零基础超详细讲解(第四天)-Python的数据类型

    Python 基本数据类型 Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型&q ...

  2. python的数据类型和变量

    python的数据类型和变量 数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种 ...

  3. python核心数据类型_Python核心数据类型-列表

    Python核心数据类型-列表 关于列表的重要属性 列表是任意对象的有序集合,列表中可以包含任何种类的对象,数字 字符串 或者是其他列表 列表可以通过偏移来读取其中的元素,也可以通过分片读取列表中的某 ...

  4. python判断数据类型type_Python 判断数据类型有type和isinstance

    Python 判断数据类型有type和isinstance 基本区别在于: type():不会认为子类是父类 isinstance():会认为子类是父类类型 执行结果如下: 用isinstance判断 ...

  5. Python基础数据类型之set集合

    Python基础数据类型之set集合 一.set数据类型介绍 二.set集合演示 三.set集合中hash介绍 1.哈希定义 2.数据类型的hash和不可hash 3.set中hash示例 四.set ...

  6. Python基础数据类型之字符串(二)

    Python基础数据类型之字符串(二) 一.字符串的常规操作 二.字符串的大小写转换 1.首字母大写 2. 每个单词首字母大写 3.大写转化为小写 4.所有字母变成大写字母 二.验证码忽略大小写 三. ...

  7. Python基础数据类型之字符串(一)

    Python基础数据类型之字符串(一) 一.字符串格式化 1.字符串占位符 2.字符串格式化操作 二.f-string格式化 三.字符串的索引 四.字符串的切片 1.常规切片使用方法 3.步长的介绍 ...

  8. 好好学python·基本数据类型

    好好学Python的第一天 基本用法 注释 输出 变量 命名规范 变量的定义方式 python的数据类型 数据类型分类 字符串类型 数字类型 List列表类型 tuple 元组类型的定义 Dict字典 ...

  9. python元组类型_什么是python元组数据类型

    什么是python元组数据类型 发布时间:2020-08-25 11:46:29 来源:亿速云 阅读:68 这篇文章运用简单易懂的例子给大家介绍什么是python元组数据类型,代码非常详细,感兴趣的小 ...

  10. python核心数据类型_Python核心数据类型—元组

    Python核心数据类型-元组 Python元组与列表类似,但是元组属于不可变类型 创建元组 a = () #创建空元组 a = (1, 2, 3) #创建一个元组 a = [1, 2, 3] b = ...

最新文章

  1. win10 uwp 按下等待按钮
  2. 递归,记忆化搜索,(棋盘分割)
  3. 【智能驾驶】车道线检测中的新IPM(逆透视变换)算法实验效果
  4. 第一次接触AgilePoint业务流程及任务管理(BPM)
  5. 长沙四大名校2021年高考成绩查询,2021年长沙高考各高中成绩及本科升学率数据排名及分析...
  6. xgboost调参指南
  7. 在WORD中删除中文或英文
  8. Redis的安装过程步骤
  9. 简单介绍信用卡分销系统
  10. JDBC作用接口和创建的步骤详细解析
  11. 用Resource Hacker辅助升级相关测试
  12. 半空间数据空间化相关接口
  13. 20180925-7 规格说明书——吉林市两日游
  14. luogu P2184 贪婪大陆
  15. python搜索pdf内容所在页码_用python合并多个pdf文件并标页码
  16. 百思不得其姐学习笔记
  17. 搭建FTP服务器后访问时出现“FTP文件夹错误 无法与服务器建立连接”的解决办法
  18. 电脑休眠睡眠状态下无线WiFi远程网络唤醒设置
  19. Revit的二次开发带来的赢利点和后续故事
  20. 投资理财-言微不劝人

热门文章

  1. 第三章 网络体系结构作业
  2. python如何用requests传送json格式数据
  3. python将嵌套列表转换为字典
  4. 【深度学习笔记】个人阅读的Deep Learning方向的paper整理
  5. 字典树-大量字符串前缀及出现次数是否存在统计(Trie树-java)算法实现
  6. 【Python】 html解析BeautifulSoup
  7. anaconda打开python文本编辑器_【python】anaconda中打开IDLE(python 自带编辑器)
  8. shell 除法保留n位小数
  9. 共享锁 排他锁 是什么区别
  10. JavaSE——Java8之Stream流