set(集合)
# 集合:无序且元素不重复
# 初始化方法一
set1 = {1, 2, 3, 4, 5}
# 初始化方法二
set1 = set([1, 2, 3, 4, 5])
print(set1) # {1, 2, 3, 4, 5}
print(type(set1)) # <class 'set'>
# 集合不能使用下标和切片访问,但可以获取长度
print(len(set1)) # 5
# 添加元素
set1.add(9)
set1.add('a')
print(set1) # {1, 2, 3, 4, 5, 9, 'a'}
# 删除元素
set1.discard(9)
print(set1) # {1, 2, 3, 4, 5, 'a'}
set1.remove('a')
print(set1) # {1, 2, 3, 4, 5}
# set没有通过下标读取元素的方法,只能判断元素是否在集合中
print(1 in set1) # True
print(10 not in set1) # True
# 遍历
for i in set1:
print(i)
set2 = {1, 2, 3, 4, 5, 6}
set3 = {2, 3, 7}
# 求差集:存在于set2中,但不在set3中的元素
print(set2 - set3) # {1, 4, 5, 6}
print(set2.difference(set3)) # {1, 4, 5, 6}
# 求补集:去掉两个集合中都有的,然后加上两个集合中分别都没有的
print(set2 ^ set3) # {1, 4, 5, 6, 7}
print(set3 ^ set2) # {1, 4, 5, 6, 7}
# 求交集:既存在于set2,也存在于set3中的元素
print(set2 & set3) # {2, 3}
print(set2.intersection(set3)) # {2, 3}
# 求并集
print(set2 | set3) # {1, 2, 3, 4, 5, 6, 7}
print(set2.union(set3)) # {1, 2, 3, 4, 5, 6, 7}
# 也可以通过 update()方法完成
set2.update(set3)
print(set2) # {1, 2, 3, 4, 5, 6, 7}
# 空的{}表示字典
print(type({})) # <class 'dict'>
# 定义空集合的正确方式
print(type(set())) # <class 'set'>
print(len(set())) # 0
# set1 是否是 set2 的子集
set1.issubset(set2) # True
# frozenset和set是一样的
set4 = frozenset(['a', 'b', 'c', 'd', 'e'])
# 或者
set4 = frozenset('abcdee')
print(set4) # frozenset({'b', 'e', 'd', 'a', 'c'})
print(type(set4)) # <class 'frozenset'>
# frozenset既不能添加元素,也不能删除元素,因为它没有 add() 和 discard()/remove() 方法
# 所以它适合作为dict的key
set5 = frozenset([1, 2, 3, 4, 5])
print(set5) # frozenset({1, 2, 3, 4, 5})
# 集合推导式
dict_list = {"name": "lixingyun", "age": 18, "sex": "male"}
set_list1 = {i for i in range(10) if i % 2 == 1}
set_list2 = {v for k, v in dict_list.items()}
print(set_list1) # {1, 3, 5, 7, 9}
print(set_list2) # {'male', 18, 'lixingyun'}
大约 7 分钟