上一章学到了集合的基础概念,也列举了一些简单的方法如:
增,删,查,改(改的集合的属性;转列表,元组,字符串) 集合的基础知识
这一章学习的是集合的其他方法,集合在数学里运用广泛,未来所需要运用到人工智能,大数据分析的,这章的内容还是要认真了解和学习的。
1;交集: 元素既在A集合里出现且也在B集合里出现的元素称为交集。A & B
2;并集; A集合与B集合合并,去重的结果称为并集。A | B
3;差集: 只在A集合出现但没在B集合里出现的,或只在B集合里出现但没在A集合里出现的。A - B B-A
4;对称差集: 排除掉A集合和B集合共有的元素后,输出剩余的 A ^ B (B ^ A)也是一样
这些概念与数学里集合的定义是一样的,来看例子:
a=['北京','上海','广州','深圳','广西','湖北','湖南']
b=['北京','东北','澳大利亚','上海','澳门','香港','深圳']
# 实际情况下是列表,元组出现的情况居多,转化为集合
a1=set(a)
b1=set(b)
print(f"交集的结果(2个集合的元素,都出现的元素是):\n{a1 & b1}")
print(f"并集的结果(2个集合元素合并去重的结果是:):\n{a1 | b1}")
print(f"差集的结果(2个集合的元素,只在a出现过的元素是):\n{a1 - b1}")
print(f"差集的结果(2个集合的元素,只在b出现过的元素是):\n{b1 - a1}")
print(f"对称差集的结果(排除掉A集合和B集合共有的元素后,剩余的是):\n{a1^b1}")
判断返回的是True 和 False,集合的判断不能用in
5;子集 与 真子集:
子集就是一个集合中的全部元素是另一个集合中的元素,有可能与另一个集合相等;
使用的符号是: <=
真子集就是一个集合中的元素全部是另一个集合中的元素, 但不相等 。
使用的符号是:<
a=[1,2,3]
b=[1,2,3]
# 判断集合a 是不是 集合b的子集
print(set(a) <= set(b))
# 判断 a 是不是 集合b 的真子集
print(set(a) < set(b))
所以:
如果A是B的子集,那么A就一定是B的真子集,
如果A是B的真子集,A不一定是B的子集。
6;超集 与 真超集:
超集 是一个集合中的全部元素包含了另一个集合中所有元素,有可能与另一个集合相等;
使用的符号是: >=
真超集 是一个集合中的全部元素包含了另一个集合中所有元素,但不相等。
使用的符号是:>
a=[1,2,3,4]
b=[1,2,3]
# 判断集合a 是不是 集合b的超集
print(set(a) >= set(b))
# 判断 a 是不是 集合b 的真超集
print(set(a) > set(b))
所以:
如果A是B的超集,那么A就一定是B的真超集,
如果A是B的超集,A不一定是B的超集。
补充内容:
更新集合的方法,注意是更新update(这个更新在字典里也有使用)但更新 与添加add不同
来看看:
a = set('world')
# 添加一个元素到集合a里,只能添加一个元素
# 只能添加不可变的序列进去,比如;字符串,数字,元组,
a.add('nihao')
# ('哈喽,明天') 是元组
a.add(('哈喽','明天'))
print(a)
以add方式添加进去的元素,会保留原有的属性,字符串还是字符串,元组还是元组
以update方式添加到集合里的就完全不一样了;
1;添加进集合里,原来的元素属性不会发生变化,但会被一一拆开来
2;更新可以把列表更新进去。
a = set('chenglu')
# 把集合a更新一下
a.update([1,2,3,4,5],'二狗',(9,0,7,0))
print(a)
我这样写的目的就是让大家能分辨出在什么时候,使用什么方法。
关于哈希值;
我们知道:
数值,字符串,元组是不可变的,
字典,列表,集合是可变的。
那到底是怎么区分的呢?咱们可以用到hash来看看他们的值
a='jintiantianqibucuo'
b= 2022
c= (1,2,3,4)
# 所以 字符串,数,和元组 都有嘻哈值。
# 有嘻哈值的都是不可变的,
# 不可变的可以作为字典的键
print(hash(a),hash(b),hash(c))
a1={'春天':100,'夏天':200}
print(hash(a1))
b1=[1,2,3,4]
print(hash(b1))
c1={1,3,4,5}
print(hash(c1))
不可变的都有嘻哈值,可变的都没有嘻哈值