Python 集合
搞懂Python集合的基本操作
集合和字典类似也是无序的,用来保存不重复的元素。
Python中的集合将所有元素放在一对大括号 {} 中,相邻元素之间用“,”分隔,格式为:{item1,item2,...,itemn}。
集合只能存储不可变的数据类型,包括整型、浮点型、字符串、元组,无法存储列表、字典、集合这些可变的数据类型。
>>> animal = {'cat', 'dog', 'pig', 'cow'}
>>> print(animal) # 这里演示的是去重功能
{'cat', 'dog', 'pig', 'cow'}
>>> 'dog' in animal # 快速判断元素是否在集合内
True
>>> a = set('abcdefghijklmn')
>>> b = set('dehkmn')
>>> a
{'m', 'i', 'n', 'b', 'a', 'f', 'k', 'e', 'l', 'c', 'h', 'j', 'd', 'g'}
>>> a - b # 集合a中包含而集合b中不包含的元素
{'i', 'b', 'a', 'f', 'l', 'c', 'j', 'g'}
>>> a | b # 集合a或b中包含的所有元素
{'m', 'i', 'n', 'b', 'a', 'k', 'e', 'h', 'f', 'l', 'c', 'j', 'd', 'g'}
>>> a & b # 集合a和b中都包含了的元素
{'m', 'n', 'k', 'e', 'h', 'd'}
>>> a ^ b # 不同时包含于a和b的元素
{'i', 'b', 'a', 'f', 'l', 'c', 'j', 'g'}
创建set集合
a = {1,'a',(1,2,3),'b',1.2} 用{}方式创建
b = set((1,2,3,4,5)) set方式创建
print(a)
print(b)
执行结果:
{1, 1.2, (1, 2, 3), 'b', 'a'}
{1, 2, 3, 4, 5}
注意:创建空集合只能使用 set() 函数实现,使用一对 {},会将视为一个空字典。
访问set集合
访问集合元素常用的方法是使用循环结构将集合中的数据逐一读取出来。
a = {'cat', 'dog', 'cow', 'pig'}
print(a)
for item in a:
print(item)
执行结果:
{'cow', 'cat', 'pig', 'dog'}
cow
cat
pig
dog
set集合添加元素
set集合添加元素的方法是add()或updte(),将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。
animal = {'cat', 'dog', 'cow', 'pig'}
animal.add("wolf")
print(animal)
animal.update({'tiger','zebra'})
print(animal)
执行结果:
{'dog', 'cat', 'wolf', 'pig', 'cow'}
{'dog', 'zebra', 'cat', 'wolf', 'tiger', 'pig', 'cow'}
set集合删除元素
set集合删除元素的方法是remove()和discard(),将元素 x 从集合 s 中删除,s.remove(x),如果元素不存在,则会发生错误。
animal = {'cat', 'dog', 'cow', 'pig'}
animal.remove("dog")
print(animal)
animal.discard('aaaa') # 元素aaaa不存在不会报错
print(animal)
animal.pop() # 随机删除集合中的一个元素
print(animal)
执行结果:
{'pig', 'cat', 'cow'}
{'pig', 'cat', 'cow'}
{'pig', 'cow'}
集合数量
set集合计算数量可以使用len()方法。
animal = {'cat', 'dog', 'cow', 'pig'}
print(len(animal))
执行结果:
清空集合与判断元素
set集合清空可以使用clear()方法,判断集合中元素是否存在使用 in,具体如下。
animal = {'cat', 'dog', 'cow', 'pig'}
print('cat' in animal)
animal.clear()
print(animal)
执行结果:
set集合之间运算
a = set('123456789')
b = set('45678')
print(a)
print(a - b) # a 和 b 的差集
print(a | b) # a 和 b 的并集
print(a & b) # a 和 b 的交集
print(a ^ b) # a 和 b 中不同时存在的元素
执行结果:
{'7', '9', '3', '6', '1', '8', '5', '2', '4'}
{'2', '9', '3', '1'}
{'7', '9', '3', '6', '1', '8', '5', '2', '4'}
{'7', '6', '8', '5', '4'}
{'9', '3', '1', '2'}
frozenset 集合
frozenset 和set相比是不可变序列,所有在set中能改变集合本身的方法,比如 remove()、discard()、add() 等,frozenset 都不支持.
通过命令dir(frozenset)可以看到 frozenset 集合支持的方法有:['copy', 'difference', 'intersection', 'isdisjoint', 'issubset', 'issuperset', 'symmetric_difference', 'union']
当集合的元素不需要改变时,我们可以使用 fronzenset 替代 set,这样更加安全。
a = {'cat', 'dog', 'cow', 'pig'}
b = frozenset(['lion', 'deer'])
c = {'rabbit', 'rat'}
# 向set集合中添加frozenset
a.add(b)
print(b)
# 向为set集合添加子set集合
c.add(a)
print(c)
print(a | b) # a 和 b 的并集
print(a & b) # a 和 b 的交集
print(a ^ b) # a 和 b 中不同时存在的元素
执行结果:
{'cow', frozenset({'deer', 'lion'}), 'dog', 'pig', 'cat'}
Traceback (most recent call last):
File "script.py", line 8, in
c.add(a)
TypeError: unhashable type: 'set'
Exited with error status 1
注意:set 集合中的元素必须是不可变的, 因为 set 是可变的,所以不能添加到set中,而添加frozenset。是没问题的。
集合内置方法完整列表
集合是项目的无序集合。每个set元素都是唯一的(没有重复),并且必须是不可变的(无法更改)。
但是,集合本身是可变的。我们可以从中添加或删除项目。
集还可以用于执行数学集运算,例如联合,相交,对称差等。
集合操作方法:
add() —— 将元素添加到集合中
clear() —— 从集合中删除所有元素
copy() —— 返回集合的副本
difference() —— 将两个或多个集合的差值作为新集合返回
difference_update() —— 从该集合中删除另一个集合的所有元素
discard() —— 如果元素是成员,则从集合中删除它。(如果元素不在集合中,则不执行任何操作)
intersection() —— 返回两个集合的交集作为新集合
intersection_update() —— 用自身和另一个的交集更新集合
isdisjoint()—— True如果两个集合的交点为空,则返回
issubset()—— 返回True另一个集合是否包含此集合
issuperset()—— 返回True此集合是否包含另一个集合
pop()—— 删除并返回一个任意set元素。KeyError如果集合为空则引发
remove() —— 从集合中删除一个元素。如果元素不是成员,则引发一个KeyError
symmetric_difference() —— 返回两个集合的对称差作为新集合
symmetric_difference_update() —— 用本身和另一个的对称差异更新一个集合
union() —— 返回新集合中集合的并集
update() 用自身和其他元素的并集更新集合
all() —— 返回True集合中所有元素是否为true(或者集合为空)。
any() —— True如果集合中的任何元素为true,则返回。如果集合为空,则返回False。
enumerate() —— 返回一个枚举对象。它包含一组中所有项目的索引和值。
len() —— 返回集合中的长度(项目数)。
max() —— 返回集合中最大的项目。
min() —— 返回集合中最小的项目。
sorted() —— 从集合中的元素返回一个新的排序列表(不对集合本身进行排序)。
sum() —— 返回集合中所有元素的总和。