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