集合
由不同的元素组成,即集合内不能有重复的元素.集合内的元素是无序排列,而且是可哈希的值,也就是不可变类型.这些元素也可以作为字典的key.
集合的定义,用大括号{}直接定义集合用大括号 set_a = {1,2,3,4,5} 集合在生成的过程中会自动去除重复元素.集合无序所以也不支持索引.
还可以采用set函数生成集合,如果是列表或者元组,会将其中每个元素拆开,如果是字符串,会将每个字符拆开.
set函数如果对字典使用,只会生成包含键的集合,对列表使用,则列表的元素不能有不可哈希的元素.
集合的内置方法:
add(item) | 向集合内增加一个元素,add只接受一个参数 |
clear() | 清空集合 |
copy() | 这个也是浅复制 |
pop() | 弹出集合中的一个元素,如果集合为空,返回KeyError.这个是随机删除. |
remove(item) | 指定删除,参数必须是集合内的元素,如果不存在,返回KeyError |
discard(item) | 指定删除,参数必须是集合内的元素,如果不存在,不做任何事情,也不报错.返回None |
集合的逻辑关系运算
上边的是单体集合操作的方法,集合主要的用途是进行逻辑判断:
集合的逻辑运算符有:
- in
- not in
- ==
- !=
- <,<=
- >,>=
- |,|= 合集
- &,&= 交集
- -,-= 差集
- ^,^=交叉补集
intersection(anotherset) | 求自身和另外一个集合anotherset的交集,符号是& |
union(anotherset) | 求自身和另外一个集合的并集,符号是| |
difference(anotherset) | 求差集,存在于原集合但不存在参数集合的结果.注意差集交换集合的顺序,结果是不同的.符号是- |
symmetric_difference(anotherset) | 交叉补集,首先把两者合并到一起,然后减去两者共有的部分,相当于并集-交集.符号是^ |
difference_update(anotherset) | 把属于anotherset里的元素直接从当前集合中去掉.这些带有update的方法都是直接更新调用方法的集合.那些不带update的方法,如果要接受更改之后的集合,需要用另外一个参数去接收,或者用|=这种符号. |
intersection_update(anotherset) | 取交集,然后赋给调用方法的变量,即操作完毕之后,原集合变为交集. |
isdisjoint(s) | 如果两个集合没有交集,返回True,否则返回False |
issubset(s) | 如果s包含当前集合,则返回True,否则返回False.就是看当前集合是否是s的子集,相当于<= |
issuperset(s) | 如果s是当前集合的子集,返回True,否则返回False.相当于>= |
symmetric_difference_update(s) | update系列方法 |
update(s) | 单独的update方法就是用并集更新调用方法的集合.没有union_update方法.另外update可以传可迭代对象,可以将可迭代对象拆解后更新多个值进当前集合.而add只能添加一个值,给add传可迭代对象,会将可迭代对象作为单个元素传进去. |
集合关系运算例子
# 集合的关系运算
a = {1, 2, 3, 4, 5, 'a', 'b', 'c'}
b = {3, 4, 5, 'b', 'c', 'd', 'e'}
c = {'f','z',32,421}
d = {'f'}
print(a.intersection(b))
print(a | b)
print(a.union(b))
print(a-b)
print(a.difference(b))
print(b-a)
print(b.difference(a))
print(a^b)
print(a.symmetric_difference(b))
集合还可以用frozenset()定义不可变集合.这个集合不可修改,除了没有增删改的方法之外,其他方法和关系运算与普通列表一致.IDE里也可以通过ctrl查看frozenset类.