set是集合,frozenset则是不可变集合,集合的特点是无序和不重复,可以用于元素去重操作。

查看一下set的源码:

1
2
3
4
5
6
7
8
9
def __init__(self, seq=()): # known special case of set.__init__
"""
set() -> new empty set object
set(iterable) -> new set object

Build an unordered collection of unique elements.
# (copied from class doc)
"""
pass

因此可以使用iterable对象作为参数,构建集合。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
s1 = set('abcd')
s2 = set(['a', 'b', 'c', 'd'])
s3 = {'a', 'b', 'c'} # set
print(s1)
print(s2)

print(s3)
s3.add('d') # set中添加元素的方法是add
print(s3)

s4 = frozenset("abcd") # fronzenset无add方法,一旦初始化,无法进行修改,常用dict的key
print(s4)

print(type(s1))
print(type(s2))
print(type(s3))

# 运行结果:
{'a', 'd', 'c', 'b'}
{'a', 'd', 'c', 'b'}
{'a', 'c', 'b'}
{'a', 'd', 'c', 'b'}
frozenset({'a', 'd', 'c', 'b'})
<class 'set'>
<class 'set'>
<class 'set'>

下面介绍一下set中常用的方法,这些也是挺重要的,需要好好理解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
s = set('abcd')
# 1.集合可以添加元素
s.add('f')
print(s)

# 输出结果:
# {'d', 'b', 'f', 'a', 'c'}

s1 = frozenset('abcde') # frozenset 是不可变的集合,可作为字典的key
# s.add() 错误,不可变集合不能添加数据

# 2.clear() 清空集合
# 3.copy() 浅拷贝集合
# 4.pop() 弹出最后一个元素
# 5.remove() 删除一个集合元素
# 6.update()像set中添加一个集合
another_set = set('abxy')
s.update(another_set)
print(s)
# 输出结果:
# {'2', 'd', '3', '1', 'b', 'f', 'a', 'c'}

# 7.difference(找不同)
ret_set = s.difference(another_set) # s - another_set,接受一个返回值
print(ret_set)
# 输出结果:
# {'d', 'c', 'f'}

# 8.求交集 &
ret_set = s & another_set
print(ret_set)
# 输出结果:
# {'x', 'a', 'b', 'y'}

# 9.求并集
ret_set = s | another_set
print(ret_set)
# 输出结果:
# {'c', 'a', 'y', 'f', 'd', 'b', 'x'}

# 10、in 对应的魔法方法__contains__
if 'a' in ret_set:
print("yes")
# 输出结果:
# yes

# 11. 判断是否是子集
if another_set.issubset(s):
print("yes")
# 输出结果:
# yes