集合(set)
集合与元组和列表相似都用于做容器,在内部可以放一些子元素,但集合有三特殊特点: 子元素不重复
、 子元素必须可哈希
、无序
.
提示:目前可哈希的数据类型 int/str/tuple;不可哈希的类型tuple/list/set 。
1 集合的定义
v1 = {1,2,99,18}
v2 = {"aa","cc","bb","Ee"}
v3 = {1,True,"world",(11,22,33)}
集合与字典虽然都是用{}
括号,但字典内部是键值对,而集合内部直接是值。
2 常用方法
-
添加元素
data = {"刘德", '张三', "王五"} data.add("李四") print(data)
data = set() data.add("aa") data.add("bb") print(data)
-
删除元素
data = {"刘德", '张三', "王五"} data.discard("王五") # 如果删除的元素不存在 不报错 print(data)
-
交集
s1 = {"aa", "bb", "cc"} s2 = {"aaa", "bb", "ccc"} s3 = s1 & s2 # 方式一:取两个集合的交集 s4 = s1.intersection(s2)) # 方式二:取两个集合的交集 print(s3,s4)
-
并集
s1 = {"aa", "bb", "cc"} s2 = {"aaa", "bb", "ccc"}} s3 = s1 | s2 # 方式一:取两个集合的并集 s4 = s1.union(s2)) # 方式二:取两个集合的并集 print(s3,s4)
-
差集
s1 = {"刘能", "赵四", "⽪⻓⼭"} s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"} s3 = s1 - s2 # 方式一:差集,s1中有且s2中没有的值 s4 = s1.difference(s2) # 方式二:差集,s1中有且s2中没有的值 print(s3,s4) s5 = s2 - s1 # 方式一:差集,s2中有且s1中没有的值 s6 = s2.difference(s1) # 方式一:差集,s2中有且s1中没有的值 print(s5,s6)
3 转换
其他类型如果想要转换为集合类型,可以通过set进行转换,并且如果数据有重复自动剔除。
提示:int/list/tuple/dict都可以转换为集合。
v1 = [11,22,33,11,3,99,22]
v2 = set(v1)
print(v2) # {11,22,33,3,99}
v1 = "123"
v2 = set(v1)
print(v2) # {"1","2","3"}
v1 = (11,22,3,11)
v2 = set(v1)
print(v2) # {11,22,3}
v1 = {"age":12, "status":True,"name":"333"}
print( set(v1.keys()) )
# 输出:{'status', 'name', 'age'}
print( set(v1.values()) )
# 输出:{'status', 'name', 'age'}
print( set(v1.items()) )
# 输出:{('age', 12), ('status', True), ('name', '333')}
4 其他
-
索引/切片/步长
集合中没有提供 索引/切片/步长 这些功能,因为他无需,所以无法使用索引操作。 -
获取集合长度
v = {"刘能", "赵四", "尼古拉斯") data = len(v) print(data)
-
for循环
v = {"刘能", "赵四", "尼古拉斯") for item in v: print(item)