Python 集合



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))

执行结果:
4

清空集合与判断元素

set集合清空可以使用clear()方法,判断集合中元素是否存在使用 in,具体如下。
 animal = {'cat', 'dog', 'cow', 'pig'}
print('cat' in animal)
animal.clear()
print(animal)

执行结果:
True 

set([])

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。是没问题的。

集合内置方法完整列表

方法 描述
add() 为集合添加元素
clear() 移除集合中的所有元素
copy() 拷贝一个集合
difference() 返回多个集合的差集
difference_update() 移除集合中的元素,该元素在指定的集合也存在。
discard() 删除集合中指定的元素
intersection() 返回集合的交集
intersection_update() 返回集合的交集。
isdisjoint() 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。
issubset() 判断指定集合是否为该方法参数集合的子集。
issuperset() 判断该方法的参数集合是否为指定集合的子集
pop() 随机移除元素
remove() 移除指定元素
symmetric_difference() 返回两个集合中不重复的元素集合。
symmetric_difference_update() 移除集合中在另一个指定集合相同的元素,并将另一个集合中不同的元素插入到当前集合中。
union() 返回两个集合的并集
update() 给集合添加元素