Python 4 集合

Python 4 集合

旧博客Python系列

教学博客地址

集合

由不同的元素组成,即集合内不能有重复的元素.集合内的元素是无序排列,而且是可哈希的值,也就是不可变类型.这些元素也可以作为字典的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类.

LICENSED UNDER CC BY-NC-SA 4.0
Comment