概念
无序的,不可随机访问的,不可重复的元素集合
与数学中的集合概念类似,可对其进行交,并,差,补等逻辑运算
分为可变集合和非可变集合,set为可变,frozenset为不可变集合,无法修改。
定义
可变集合
s = {1, 2, 3}
s = set('abc')
s = set([1, 2, 3])
s = set((1, 2, 3)))
print(s, type(s))
{1, 2, 3} <class ‘set’>
集合推导式:
s = set(x for x in range(10))
print(s, type(s))
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} <class ‘set’>
不可变集合
fs = frozenset('abc')
print(fs, type(fs))
frozenset({‘b’, ‘c’, ‘a’}) <class ‘frozenset’>
集合推导式:
fs = frozenset(x ** 2 for x in range(1,10) if x % 2 == 0)
print(fs, type(fs))
frozenset({16, 64, 4, 36}) <class ‘frozenset’>
- 创建空集合:
s = set()
s = frozenset() - 集合的元素必须是可哈希的值。即不可变类型。
- 如果集合中的元素值出现重复,则会被合并为1个。
集合可以用于列表去重。
l = [1, 2, 2, 3, 3]
s = set(l)
result = list(s)
可变集合增
s = {1, 2, 3}
s.add(4)
print(s,type(s))
{1, 2, 3, 4} <class ‘set’>
可变集合删
s.remove(element)
删除set中的一个元素,如果没有则返回错误
s = {1, 2, 3}
result = s.remove(3)
print(result, s)
s.discard(element)
删除set中的一个元素,如果没有则do nothing
s.pop()
随机删除并返回集合的一个元素,若集合为空,则返回一个错误。
s = {1, 2, 3}
result = s.pop()
print(result, s)
1 {2, 3}
s.clear()
清空集合中的所有元素
s = {1, 2, 3}
result = s.clear()
print(result, s)
None set()
可变即不可变集合 查
for v in s:
使用迭代器:
s = {1, 2, 3}
its = iter(s)
# print(next(its))
for v in its:
print(v)
1
2
3
交集
可变与不可变集合混合运算,返回结果类型以运算符左侧为主。
intersection(Iterable)
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6}
result = s1.intersection(s2)
print(result, type(result))
{4, 5} <class ‘set’>
逻辑&
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6}
result = s1 & s2
print(result, type(result))
{4, 5} <class ‘set’>
intersection_update
交集计算完毕后会再次赋值给原对象
s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6}
result = s1.intersection_update(s2)
print(result, type(result))
print(s1,s2)
None <class ‘NoneType’>
{4, 5} {4, 5, 6}
交集为iterable
s1 = {'1', '2', '3', '4', '5'}
result = s1.intersection('123')
print(result, type(result))
{‘1’, ‘3’, ‘2’} <class ‘set’>
并集
union
s1 = {1, 2, 3}
s2 = {3, 4, 5}
result = s1.union(s2)
print(result, s1)
{1, 2, 3, 4, 5} {1, 2, 3}
逻辑 |
s1 = {1, 2, 3}
s2 = {3, 4, 5}
result = s1 | s2
print(result, s1)
{1, 2, 3, 4, 5} {1, 2, 3}
update
s1 = {1, 2, 3}
s2 = {3, 4, 5}
result = s1.update(s2)
print(result, s1)
None {1, 2, 3, 4, 5}
差集
difference
s1 = {1, 2, 3}
s2 = {3, 4, 5}
result = s1.difference(s2)
print(result, s1)
{1, 2} {1, 2, 3}
-
s1 = {1, 2, 3}
s2 = {3, 4, 5}
result = s1 - s2
print(result, s1)
{1, 2} {1, 2, 3}
difference_update
s1 = {1, 2, 3}
s2 = {3, 4, 5}
result = s1.difference_update(s2)
print(result, s1)
None {1, 2}
判定
两个集合不相交
s1 = {1, 2, 3}
s2 = {3, 4, 5}
result = s1.isdisjoint(s2)
print(result)
False
一个集合包含另一个集合
s1 = {1, 2, 3}
s2 = {1,2}
result = s1.issuperset(s2)
print(result)
True
一个集合包含于另一个集合
s1 = {1, 2, 3}
s2 = {1,2}
result = s2.issubset(s1)
print(result)
True