集合(set)是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset())两种。
集合的特点:
- 由不同元素组成
- 无序
- 集合中元素必须是不可变类型(number,string,tuple)
创建可变集合
s = {2, 3, 1, 4, 3} print(s) # {1, 2, 3, 4} # 通过set()创建 s = set('hello') print(s) # {'e', 'o', 'l', 'h'} s = set(['xiao', 'xiao', 'ming']) print(s) # {'xiao', 'ming'}
集合内置方法
add() # 添加
s = {1, 2, 3} s.add('xm') print(s) # {1, 2, 3, 'xm'} s.add(3) print(s) # {1, 2, 3, 'xm'}
clear() # 清空
s = {1, 3, 2} s.clear() print(s) # set()
pop() # 删除
s = {1, 2, 3, 'xm'} s.pop() print(s) # {2, 3, 'xm'}
remove() # 指定删除,删除不存在的元素会报错
s = {1, 2, 3, 'xm'} s.remove('xm') print(s) # {1, 2, 3} s.remove('xxm') # 报错
discard() # 指定删除,删除不存在的元素不会报错
s = {1, 2, 3, 'xm'} s.discard('xm') print(s) # {1, 2, 3} s.discard('xxm') # 不会报错,继续执行下面的代码 print(s) # {1, 2, 3}
copy() # 拷贝(复制)
s = {1, 2, 3, 'xm'} new_s = s.copy() print(new_s) # {1, 2, 3, 'xm'}
update() # 更新
s1 = {1, 2, 3, 'xm'} s1.update('enen') # 字符串 print(s1) # {1, 2, 3, 'xm', 'n', 'e'} s1.update({3, 4, 'enen'}) # 集合 print(s1) # {1, 2, 3, 4, 'e', 'enen', 'n', 'xm'} s1.update(('abc', 'qwe')) # 元组 print(s1) # {1, 2, 3, 4, 'abc', 'e', 'enen', 'qwe', 'n', 'xm'} s1.update(['list1', 'list2']) # 列表 print(s1) # {1, 2, 3, 4, 'abc', 'list1', 'list2', 'e', 'enen', 'qwe', 'n', 'xm'}
集合交、差、并集
intersection() # 交集(&)
# 语法 # set1.intersection(set2) py_list = {'ergou', 'xiaoming', 'goudan'} php_list = {'xiaoming', 'xiaohong','xiaosan'} print(py_list.intersection(php_list)) # {'xiaoming'} print(py_list & php_list) # {'xiaoming'}
union() # 并集(|)
# 语法 # set1.union(set2) py_list = {'ergou', 'xiaoming', 'goudan'} php_list = {'xiaoming', 'xiaohong','xiaosan'} print(py_list.union(php_list)) # {'ergou', 'xiaoming', 'goudan', 'xiaohong', 'xiaosan'} print(py_list | php_list) # {'ergou', 'xiaoming', 'goudan', 'xiaohong', 'xiaosan'}
difference() # 差集(-)
# 语法 # set1.difference(set2) py_list = {'ergou', 'xiaoming', 'goudan'} php_list = {'xiaoming', 'xiaohong','xiaosan'} print(py_list.difference(php_list)) # {'ergou', 'goudan'} print(php_list.difference(py_list)) # {'xiaohong', 'xiaosan'} print(py_list - php_list) # {'ergou', 'goudan'} print(php_list - py_list) # {'xiaohong', 'xiaosan'}
symmetric_difference() # 交叉补集(^)
# 语法 # set1.symmetric_difference(set2) py_list = {'ergou', 'xiaoming', 'goudan'} php_list = {'xiaoming', 'xiaohong','xiaosan'} print(py_list.symmetric_difference(php_list)) # {'ergou', 'goudan', 'xiaohong', 'xiaosan'} print(py_list ^ php_list) # {'ergou', 'goudan', 'xiaohong', 'xiaosan'}
difference_update() #
# 相当于 # set1 = set1 - set2 py_list = {'ergou', 'xiaoming', 'goudan'} php_list = {'xiaoming', 'xiaohong','xiaosan'} print(py_list.difference_update(php_list)) # {'ergou', 'goudan'} print(php_list.difference_update(py_list)) # {'xiaohong', 'xiaosan'}
intersection_update() #
# 相当于 # set1 = set1 & set2 py_list = {'ergou', 'xiaoming', 'goudan'} php_list = {'xiaoming', 'xiaohong','xiaosan'} py_list.intersection(php_list) print(py_list) # {'xiaoming'}
indisjoint() # 判断两集合交集是否为空(没有交集返回->True,有交集返回->False)
# 格式 # set1.isdisjoint(set2) s1 = {1, 2, 3} s2 = {4, 5, 6} var = s1.isdisjoint(s2) print(var) # True s2 = {3, 4, 5} var = s1.isdisjoint(s2) print(var) # False
issubset() # 判断一个集合是否是另一个集合的子集
# set1.issubset(s2) s1 = {1, 2, 3} s2 = {1, 2, 3, 4, 5, 6} print(s1.issubset(s2)) # True print(s2.issubset(s1)) # False
issuperset() # 判断一个集合是否是另一个集合的父集
# set1.issuperset(s2) s1 = {1, 2, 3} s2 = {1, 2, 3, 4, 5, 6} print(s1.issubset(s2)) # False print(s2.issubset(s1)) # True
symmetric_difference_update() #
# 相当于 # set1 = set1.symmetric_difference(set2) s1 = {1, 2, 3} s2 = {3, 4, 5} s1.symmetric_difference_update(s2) print(s1) # {1, 2, 4, 5}
创建不可变集合
s = frozenset('xiaoming') print(s) # frozenset({'m', 'g', 'o', 'a', 'i', 'x', 'n'})