1. 集合类型
{} 集合是一种无序不可重复的序列;集合常用于对两个列表的交并差处理;
集合没有任何获取元素的方法,只用作处理列表或元组的临时数据类型,不适合数据的存储和传输。
2. 集合的创建 {}或set()函数
- 将一个用逗号分割的元素列表放在一堆花括号内可以创建一个非空set集合,如{'Tom', 'Jerry', 'Peter'}
- 给set的构建函数传递一个空值将会创建一个空set集合(注意:{}表示的是一个空字典而不是空set集合)
- 给set的构架你函数传一个非空iterable参数将会创建一个非空set集合
# 使用内置函数set()创建空集合 set_1 = set() print(set_1,type(set_1),"\n") # {}表示的是一个空字典而不是空set集合 set_2 = {} print(set_2,type(set_2),"\n") # 用{ }创建集合对象时,集合内元素必须是不可变数据类型 # set_3 = {[34, 56], [78, 90]} # 注:TypeError: unhashable type: 'list' # [1,2,3,4,4] set()方法可以包裹列表,且可帮助列表去重 list_set = [1,2,3,4,4] # 此时可能想再转回列表,利用列表内置函数list()即可 set_4 = set(list_set) print(set_4,type(set_4),"\n") # 字典同理 # set_test = {{'name': 'll'}} # TypeError: unhashable type: 'dict' dict_set = set({'name': 'll'}) # {'name'} 留下的是key值 print(dict_set,type(dict_set))
执行结果:
set() <class 'set'> {} <class 'dict'> {1, 2, 3, 4} <class 'set'> {'name'} <class 'set'>
3.集合增加元素的操作
可以利用set.add(元素) 一次增加一个元素;
利用set.update(可迭代对象) 一次增加多个元素;已经存在的元素不会重复添加;
set_demo = {1,2,"abc","ef"} set_demo.add(520) print(set_demo) set_demo.update(['1314','傻子']) print(set_demo)
4.集合中删除元素的操作
set.remove(元素) 删除指定元素;
set.clear() 清空集合中元素;
利用python内置函数del ;
set_demo = {1,2,"abc","ef"} set_demo.remove(1) print(set_demo) # KeyError: 'py' (元素不存在时会报错) # set_demo.remove(1111) # 元素不存在时不会报错 set_demo.discard(2) print(set_demo) set_demo.clear() print(set_demo) # NameError: name 'set_demo' is not defined # del set_demo # print(set_demo)
执行结果:
{'ef', 2, 'abc'} {'ef', 'abc'} set()
5.集合之间的运算
5.1 集合的差集
- a, b两个集合,属于a且不属于b的元素集,就是a与b的差集;
- 利用difference函数,a.difference(b)可以获取结果; 或直接a - b;
- a.difference_update(b) 将差集结果赋值给a、此时b不变;
a = {1,2,3,4} b = {3,4,5,6} print(a.difference(b)) print(a-b) print(a,b) print(id(a)) # a原有的集合对象被修改了,集合b未被修改 a.difference_update(b) print(a,b) print(id(a))
执行结果:
{1, 2} {1, 2} {1, 2, 3, 4} {3, 4, 5, 6} 2503182612320 {1, 2} {3, 4, 5, 6} 2503182612320
5.2 集合的交集
- a,b集合中共有的元素集;
- a.intersection(b, c...) 可以多个集合一起取交集;
- 利用&符号, a & b & c;
- a.intersection_update(b, c...) 将交集结果更新到a集合;
a = {1,2,3,4} b = {3,4,5,6} c = {3,7,8} print(a & b & c) print(a.intersection(b,c)) a.intersection_update(b,c) print(a,b,c)
执行结果:
{3} {3} {3} {3, 4, 5, 6} {8, 3, 7}
5.3 集合的并集
- 几个集合中所有元素组成的集合;
- a.union(b, c ...) ;
- a | b | c ;
a = {1,2,3,4} b = {3,4,5,6} c = {3,7,8} print(a | b | c) print(a.union(b,c)) print(a,b,c)
执行结果:
{1, 2, 3, 4, 5, 6, 7, 8} {1, 2, 3, 4, 5, 6, 7, 8} {1, 2, 3, 4} {3, 4, 5, 6} {8, 3, 7}
5.4 对称差集
- 只在a和只在b中的元素集合;
- a.symmetric_difference(b)、a.symmetric_difference_update(b)、a ^ b
a = {1,2,3,4} b = {3,4,5,6} print(a ^ b) print(a.symmetric_difference(b)) a.symmetric_difference_update(b) print(a,b)
执行结果:
{1, 2, 5, 6} {1, 2, 5, 6} {1, 2, 5, 6} {3, 4, 5, 6}
5.5 集合的一些返回值是bool型的函数
- a.isdisjoint(b) 判断两集合是否没有相同元素;
- a.issubset(b) 判断一个集合a是否是集合b 的子集;
- 与子集相对,b.issuperset(a) 判断集合b是否是集合a的超集
a = {1,2,3,4} b = {3,4,5,6} print(a.isdisjoint(b)) print(a.isdisjoint("5")) print(a.issubset({1,2,3,4,5})) print(a.issuperset({1,2}))
执行结果:
False True True True
6. 简单函数在集合的使用
- in 、not in 成员判断;
- len(set) 集合长度;
a = {1,2,3,4} print(1 in a) print(len(a))
执行结果:
True 4
7. frozenset() 创建不可变集合
- 不可变集合之于集合,相当于元组之于列表
- 因为{ }创建集合时,存储的对象必须是不可变类型元素,所以想存储另一个集合时,就不可以了,frozenset就解决了这个问题
- frozenset还可以作为字典的key、且存在哈希值;
# frozenset(可迭代对象) # 可以传集合 a = frozenset({34, 56}) print(a) # frozenset({56, 34}) # 可以传列表 b = frozenset([3, 4]) print(b) # frozenset({3, 4}) # 可以传元组 c = frozenset((454,)) print(c) # frozenset({454}) # { }创建集合时,集合中不能存储集合 # d = {{34}} # TypeError: unhashable type: 'set' # 可以存储不可变集合 d = {frozenset([454])} print(d) # {frozenset({454})} a = frozenset({34, 56}) print(a) # frozenset({56, 34}) # AttributeError: 'frozenset' object has no attribute 'add' # a.add(45) # frozenset就不存在更改操作相关的方法了 e = frozenset('eee') print(e) # frozenset({'e'})标签:set,python,demo,元素,汇总,print,frozenset,集合 From: https://www.cnblogs.com/xmtxh/p/16967140.html