Python中字典和集合(二)

简介: Python中字典和集合(二)

Python中字典和集合(一):https://developer.aliyun.com/article/1495625?spm=a2c6h.13148508.setting.14.31004f0efbaqiw

四、集合的运算

在python 中,集合的概念,有点类似数学之中集合的概念。可以求出交集并集等运算操作。

1、交集 set.intersection()

取两个集合共同的部分

场景:有两组学生,第一组学生,选修了语文课,第二组学生,选修了数学课。

但是其中有一些学生即选修了语文,也选修了数学,要求快速定位到这种学生。

stu_shuxue = {“陈司”, “李大”, “王二”}

stu_yuwen = {“陈司”, “王二”}

#取交集

print(stu_shuxue.intersection(stu_yuwen))

#写法2

print(stu_shuxue&stu_yuwen)

{“陈司”, “王二”}

{“陈司”, “王二”}

2、并集,set.union()

理解:把两个结合中所有元素组合在一起,并排重后取出结果。

场景:还是刚才的两组学生,求选修了数学和语文的全部同学名单。

stu_shuxue = {“陈司”, “李大”, “王二”}

stu_yuwen = {“陈司”, “王二”}

#取并集

print(stu_shuxue.union(stu_yuwen))

#写法2

print(stu_shuxue | stu_yuwen)

{“陈司”, “李大”, “王二”}

{“陈司”, “李大”, “王二”}

3、差集 set.difference()

理解:两个集合相减,A 减 B ,A 里有 1、2、3 B里有 2、3、4 如果 A 与B 的差集,会发现A 有 1 是B里没有的。

所以A 减 B 等于 1 ,反过来 B 减 A 就等于4 ,因为4 是A 集合里没有的元素。

也就是说,发起差集的集合,会把自己有,而对方没有的元素得到。

说的直白点,我是帅,高,富。 你是 丑 , 高,富。咱们都有高和富,我减去你就是帅。你减去我就是丑。

set1 = {“陈司”,“高”,“富”,“帅”}

set2 = {“某人”,“高”,“富”,“丑”}

#方法1

print(set1.difference(set2))

#方法2

print(set1-set2)

{“陈司”,“帅”}

{“陈司”,“帅”}

print(set2-set1)

{“某人”,“丑”}

4、交叉补集 set.symmetric_difference()

对称差集

理解。集合A 是1、2、3 集合B 是 2、3、4 交叉补集就只保留 1 和 4 。因为 1 是 A 独有的, 4 是B 独有的。

交叉补集会去掉共有的部分,只保留双方独有的部分。

场景:选修语文的有一组学生,选修数学的有一组学生。已知有的学生既选修了数学,

又同时选修了语文,求只选修了一门课程的学生。这种情况就适合交叉补集。

#学习语文的

set_yuwen = {“陈司”,“A”,“B”,“C”}

#学习数学的

set_shuxue = {“某人”,“A”,“B”,“C”}

#方法1

print(set_shuxue.symmetric_difference(set_yuwen))

#方法2

print(set_yuwen^set_shuxue)

{“陈司”,“某人”}

{“某人”,“陈司”}

两个集合各自特有的

#issubset() 判断是否是子集

set1 = {“刘德华”,“郭富城”,“张学友”,“王文”}

set2 = {“王文”}

res = set2.issubset(set1)

print(res)

#简写

res = set2 < set1

print(res)

#issuperset 判断是否是父集

set1 = {“刘德华”,“郭富城”,“张学友”,“王文”}

set2 = {“王文”}

res = set1.issuperset(set2)

print(res)

#简写

res = set1 > set2

print(res)

#isdisjoint() 检测两集合是否不相交 不相交 True 相交False

set1 = {“刘德华”,“郭富城”,“张学友”,“王文”}

set2 = {“王文”}

res = set1.isdisjoint(set2)

print(res)

判断某个数据是否存在于集合中

in: 存在返回True,不存在返回False not in与之相反

s1 = {1, 2, 3}

print(5 in s1)

False

五、冰冻集合 (额外了解)

也属于强制转换的一个类型

“”“frozenset 单纯的只能做交差并补操作,不能做添加或者删除的操作”“”

lst = [“王文”,“宋健”,“何旭彤”]

fz1 = frozenset(lst)

print(fz1, type(fz1))

#不能再冰冻集合中添加或者删除元素

#fz1.add(1)

#fz1.update(“abc”)

#fz1.discard(“王文”)

#冰冻集合只能做交差并补,返回的依然是冰冻集合

lst2 = [“王文”,“王同培”,“刘一缝”]

fz2 = frozenset(lst2)

print(fz2, type(fz2))

#交集

res = fz1 & fz2

print(res)

#可遍历冰冻集合

for i in fz2:

print(i)

相关文章
|
1天前
|
Python
【Python操作基础】——字典,迭代器和生成器
【Python操作基础】——字典,迭代器和生成器
|
1天前
|
Python
【Python操作基础】——集合
【Python操作基础】——集合
|
1天前
|
索引 Python
Python中的列表、元组和字典各具特色
Python中的列表、元组和字典各具特色:列表是可变的,元组不可变,字典亦可变;列表和元组有序,字典无序(但在Python 3.7+保持插入顺序);元素类型上,列表和元组元素任意,字典需键不可变;列表用方括号[],元组用圆括号(),字典用大括号{}表示。列表不适合作字典键,元组可以。选择数据结构应依据实际需求。
7 2
|
4天前
|
开发者 Python
【Python 基础】递推式构造字典(dictionary comprehension)
【5月更文挑战第8天】【Python 基础】递推式构造字典(dictionary comprehension)
|
14天前
|
存储 算法 索引
Python中字典和集合(一)
Python中字典和集合(一)
|
14天前
|
索引 Python
【Python21天学习挑战赛】集合 & 数据类型补充
【Python21天学习挑战赛】集合 & 数据类型补充
|
14天前
|
存储 缓存 Python
【Python21天学习挑战赛】字典 && 小数据池
【Python21天学习挑战赛】字典 && 小数据池
|
16天前
|
存储 JSON 数据处理
|
16天前
|
存储 缓存 人工智能
bidict,一个超酷的 Python 双向字典库!
bidict,一个超酷的 Python 双向字典库!
19 1
|
16天前
|
存储 人工智能 索引
Python中的嵌套字典访问与操作详解
Python中的嵌套字典访问与操作详解
22 1