Python:集合

本文详细介绍了Python中集合(set)的基本概念、使用方法及各种集合操作符。包括如何创建集合、集合的更新方法如添加(add)、合并(update)、清空(clear),以及删除集合等。此外还介绍了集合之间的联合(|)、交集(&)、差集(-)和对称差集(^)等操作,并解释了如何利用这些操作实现集合的更新。最后,还展示了如何判断一个集合是否为另一个集合的子集或超集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.数学上,把set称作由不同元素组成的集合,集合对象时一组无序排列的可哈希值,集合成员是可以做字典的键。

2.集合支持用in 和not in 操作符来检查成员,由len()得到集合的基数,用for循环迭代集合的成员,单数用于集合本身是无序的,你不可以为集合创建索引或者执行切片操作,有没有键来获取集合中的值。集合中不会出现相同的两个元素

3.集合中有2中不同的类型:可变集合set()和不可变集合frozenset(),可变集合不是可以hash的,因此不能够作为字典的键

4.更新可变集合的方法

>>> s=set("h")   #集合初始化
>>> s
set(['h'])
>>> s.add('j')  #向集合中添加新的元素
>>> s
set(['h', 'j'])
>>> s1=set("chinese")  
>>> s1
set(['c', 'e', 'i', 'h', 'n', 's'])
>>> s.update(s1)#合并两个集合,元素相同的覆盖,没有的加上
>>> s
set(['c', 'e', 'i', 'h', 'j', 'n', 's'])
>>> s.clear()  #删除集合中所有元素
>>> s
set([])
>>> 

>>> del s   #删除整个集合
>>> s
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 's' is not defined
>>>

5.集合类型的操作符
①、联合(|):两个集合合并

>>> s=set("chinese")
>>> t=set("china")    
>>> s|t   #或者s.union(t)
set(['a', 'c', 'e', 'i', 'h', 'n', 's'])
>>>

②、交集(&):取两个集合相同部分组成一个新的集合

>>> s=set("chinese")
>>> t=set("china")  
>>> s&t   #或者s.intersection(t)
set(['i', 'h', 'c', 'n'])
>>>

③、差补(-):取只属于s不属于t的集合

>>> s=set("chinese")
>>> t=set("china") 
>>> s-t   #s.difference(t)
set(['s', 'e'])

④、对称差分(^):该集合中的元素,只能属于s或者集合t成员 ,不能同时属于这两个集合

>>> s=set("chinese")
>>> t=set("china")
>>> s^t   #s.symmetric_diffference(t)
set(['a', 'e', 's'])
>>>

⑤、其他

>>> s
set(['c', 'e', 'i', 'h', 'n', 's'])
>>> s1
set(['i', 'h', 'c', 'a', 'n'])

>>> s.difference_update(s1)   #删除s中在是集合s1中出现的元素
>>> s
set(['e', 's'])
>>> 

>>> s=set("chinese")
>>> s1=set("china")
>>> s.symmetric_difference(s1)  #返回两个集合不同时包含的元素组成的集合
set(['a', 'e', 's'])
>>> 

>>> s
set(['c', 'e', 'i', 'h', 'n', 's'])
>>> s1
set(['i', 'h', 'c', 'a', 'n'])
>>> s.symmetric_difference_update(s1)  #两个集合不同时包含的元素组成的集合赋值给s
>>> s
set(['a', 'e', 's'])
>>> 

注意:左右两个操作数的类型相同,所产生的结果类型是相同的,如果不同,则产生的结果的类型与左边操作数的类型相同(在这里所说的类型是指是不变集合frozenset和可变集合set)

6.集合的其他常用方法

>>> s
set(['c', 'e', 'i', 'h', 'n', 's'])
>>> t
set(['i', 'h', 'c', 'a', 'n'])
>>> s.issubset(t)   #如果t是s的子集就返回True
False
>>> s.issuperset(t)  #如果t是s的超集就返回True
False
>>>

>>> s
set(['c', 'e', 'i', 'h', 'n', 's'])
>>> s.remove('c')  #删除集合中对应的元素,没有就报错
>>> s
set(['e', 'i', 'h', 'n', 's'])
>>> s.remove('k')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'k'
>>>

>>> s
set(['e', 'i', 'h', 'n', 's'])
>>> s.discard('e') #删除集合中对应的元素,没有不做任何操作
>>> s
set(['i', 'h', 'n', 's'])
>>> s.discard('k')
>>>

>>> s
set(['i', 'h', 'n', 's'])
>>> s.pop('i')   #按照序列的调用方法是不可行的
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: pop() takes no arguments (1 given)

>>> s.pop()  #删除并返回集合中第一个元素
'i'
>>> s.pop()
'h'
>>>

>>> s
set(['c', 'e', 'i', 'h', 'n', 's'])
>>>
>>> s.clear()  #清空集合中所有的值
>>> s
set([])
>>>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值