1创建集合
创建集合的三种方法
1使用花括号,元素之间以逗号分隔{"Fishc","Python"}
2使用集合推导式:{s for s in "Fishc"}
3使用类型构造器,也就是set():set("FishC")
2集合的随机性
>>> set("FishC")
{'i', 'C', 's', 'F', 'h'}
集合是无序的,所以我们不能使用下标索引的方式去访问
我们可以用 in 和 not in 来判断某个元素是否存在集合中
>>> 'C' in s
True
>>> 'c' not in s
True
3访问集合
如果想要访问
>>> for each in s:
... print(each)
...
F
h
i
s
C
集合中的元素,可以使用迭代的方式
4集合的必杀技-去重
>>> set([1, 1, 2, 3, 5])
{1, 2, 3, 5}
在实际开发中,我们经常需要去检测一个列表中是否存在相同的元素
那么在没有学习过集合之前,我们很有可能需要通过迭代来统计每个元素出现的次数,从而判断是否唯一……
但是,现在,咱们只需要这么写:
>>> s = [1, 1, 2, 3, 5]
>>> len(s) == len(set(s))
False
>>> s = [1, 2, 3, 5]
>>> len(s) == len(set(s))
True
5集合的方法
列表、元组、字符串、字典它们都有一个 copy() 方法,那么集合也不例外
>>> t = s.copy()
>>> t
{'h', 's', 'i', 'F', 'C'}
如果我们要检测两个集合之间是否毫不相干,可以使用isdisjoint(other)方法:
>>> s.isdisjoint(set("Python"))
False
>>> s.isdisjoint(set("JAVA"))
True
这个方法并不要求必须是集合类型,可以是任何一种可迭代对象:
>>> s.isdisjoint("Python")
False
>>> s.isdisjoint("JAVA")
True
如果我们要检测集合是否为另一个集合的子集,可以使用issubset(other)方法:
>>> s.issubset("FishC.com.cn")
True
如果我们要检测该集合是否为另一个集合的超集,可以使用 issuperset(other) 方法(对于两个集合 A、B,如果集合 B 中任意一个元素都是集合 A 中的元素,我们就说这两个集合有包含关系,称集合 A 为集合 B 的超集):
>>> s.issuperset("Fish")
True
除了检测子集和超集,我们还可以计算当前集合和其它对象共同构造的并集、交集、差集以及对称差集。
并集,就是将集合与其它集合的元素合并在一起,组成一个新的集合:
>>> s.union({1, 2, 3})
{1, 2, 3, 'h', 's', 'i', 'F', 'C'}
交集就是找到多个集合之间共同的那些元素
>>> s.intersection("Fish")
{'h', 's', 'i', 'F'}
差集就是存在于该集合,但不存在于其他集合的元素:
>>> s.difference("Fish")
{'C'}
最后一个是求对称差集,就是排除掉 s 集合和 other 容器中共有的元素后,剩余的所有元素,这个只能支持一个参数:
>>> s.symmetric_difference("Python")
{'t', 'y', 'F', 's', 'P', 'C', 'n', 'o', 'i'}
python也提供了相应的运算符,可以直接进行运算
检测子集可以使用小于等于号 (<=)
检测真子集我们可以使用小于号(<)
并集使用管道符(|)
交集使用and符号(&)
差集使用减号(-)
对称差集使用脱字符(^)
6冻结集合
python将集合细分为可变和不可变两种对象,前者是set(),后者是frozenset()
被冻结的集合是不可修改的(frozenset())
7适用于set()对象的方法
update(*other)方法使用others容器中的元素来更新集合
>>> s = set("FishC")
>>> s
{'s', 'C', 'i', 'F', 'h'}
>>> s.update([1, 1], "23")
>>> s
{'s', 1, 'C', 'i', 'F', 'h', '3', '2'}
intersection_update(*others),difference_update(*others) 和 symmetric_difference_update(other) 分别是使用前面讲过的交集、差集和对称差集的方式来更新集合:
>>> s.intersection_update("FishC")
>>> s
{'s', 'C', 'i', 'F', 'h'}
>>> s.difference_update("Php", "Python")
>>> s
{'s', 'C', 'i', 'F'}
>>> s.symmetric_difference_update("Python")
>>> s
{'s', 't', 'C', 'o', 'h', 'i', 'y', 'F', 'n', 'P'}
如果单纯希望往集合里添加数据可以使用add(elem)方法
>>> s.add("45")
>>> s
{'s', 't', 'C', 'o', 'h', 'i', 'y', 'F', '45', 'n', 'P'}
在集合中删除某个元素,可以使用 remove(elem) 或者 discard(elem) 方法:
>>> s.remove("瓦迈")
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
s.remove("瓦迈")
KeyError: '瓦迈'
>>> s.discard("瓦迈")
可以用clear()方法就是将集合清空
>>> s.clear()
>>> s
set()