集合是由不重复元素组成的无序容器。基本用法包括成员检测、消除重复元素。集合对象支持合集、交集、差集、对称差分等数学运算。
创建集合用花括号或 set() 函数。注意,创建空集合只能用 set() ,不能用 {} , {} 创建的是空字典. 可以包含多个元素,用逗号分割
集合的元素遵循三个原则:
1、每个元素必须是不可变类型
2、没有重复的元素
3、无序
并集 |或者union()
将两个集合的元素合在一起,并去除重复的
class1 = {"python", "java", "c++", "go"}
class2 = {"python", "php", "js", "go"}
print(class1 | class2)
print(class1.union(class2))
"""
{'js', 'go', 'c++', 'python', 'java', 'php'}
{'js', 'go', 'c++', 'python', 'java', 'php'}
"""
交集 &
求两个集合共同的部分
class1 = {"python", "java", "c++", "go"}
class2 = {"python", "php", "js", "go"}
print(class1 & class2) # {'python', 'go'}
差集 -或者difference()
set1-set2 在set1中存在但是在set2中不存在的元素
class1 = {"python", "java", "c++", "go"}
class2 = {"python", "php", "js", "go"}
print(class1 - class2) # {'java', 'c++'}
print(class1.difference(class2)) # {'java', 'c++'}
对称差集 ^或者symmetric_difference()
去除两个集合中都存在的元素,剩下的元素组合成的集合
class1 = {"python", "java", "c++", "go"}
class2 = {"python", "php", "js", "go"}
print(class1 ^ class2) # {'js', 'php', 'c++', 'java'}
print(class1.symmetric_difference(class2)) # {'js', 'php', 'c++', 'java'}
父集、子集
set1 = {1, 2, 3, 4, 5}
set2 = {1, 2, 3, 4}
# 判断set1是否是set2的父集
print(set1 >= set2)
print(set1.issuperset(set2))
# 判断set2是否是set1的子集
print(set2 <= set1)
print(set2.issubset(set1))
添加元素add()
只能添加不可变类型
classes = {"python", "java", "c++", "go"}
classes.add("php")
print(classes) # {'python', 'java', 'c++', 'php', 'go'}
classes.add(["golang", "js"]) # 报错 TypeError: unhashable type: 'list'
删除元素
pop()
不用指定参数,随机删除,并且会有返回值
classes = {"python", "java", "c++", "go"}
res = classes.pop()
print(res) # 随机删除 每次值可能都不一样
remove()
指定元素删除,元素不存在则报错,单纯的删除,没有返回值,
classes = {"python", "java", "c++", "go"}
classes.remove("go")
print(classes) # {'python', 'java', 'c++'}
classes.remove("php") # 报错 KeyError: 'php'
discard()
指定元素删除,元素不存在不报错,单纯的删除,没有返回值,
classes = {"python", "java", "c++", "go"}
classes.discard("go")
print(classes) # {'python', 'java', 'c++'}
classes.discard("php")
print(classes) # {'python', 'java', 'c++'}
update()
已存在就忽略,没存在就添加
classes1 = {"python", "java", "c++", "go"}
classes2 = {"php", "js"}
classes1.update(classes2)
print(classes1)
for 循环
classes1 = {"python", "java", "c++", "go"}
for cls in classes1:
print(cls)
是否包含 in
classes = {"python", "java", "c++", "go"}
print("python" in classes) # True
print("php" in classes) # False