七叶笔记 » golang编程 » python数据类型-集合set

python数据类型-集合set

集合是由不重复元素组成的无序容器。基本用法包括成员检测、消除重复元素。集合对象支持合集、交集、差集、对称差分等数学运算。

创建集合用花括号或 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  

相关文章