python基础数据类型之集合

一、什么是集合

集合(set)是Python基本数据类型之一,它具有天生的去重能力,即集合中的元素不能重复。集合也是无序的,且集合中的元素必须是不可变类型

 

二、如何创建一个集合

用花括号{}将一堆没有映射关系的数据包裹起来,数据之间用逗号隔开就构成了集合, 这里要和字典区别开,字典的元素有映射关系

>>> set1 = {1,2,3,4}
>>> set1
{1, 2, 3, 4}
>>> type(set1)
<class 'set'>
>>>

 

用set()函数将一个可迭代序列转换成集合

>>> set2 = set([1,1,3,3,4,4,4])
>>> set2
{1, 3, 4}           # 集合会自动去除重复元素
>>> type(set2)
<class 'set'>
>>> set3 = set('Keys')
>>> set3
{'K', 'y', 'e', 's'}    #从这里可以看出集合是无序的
>>>

三、访问集合

由于集合是无序的,所以不能用索引来访问,如果要访问集合里的元素,可以有下面的方法

利用for循环遍历集合

>>> for i in set1:
...     print(i)
...
1
2
3
4
>>>

 

利用innot in判断一个元素是否在集合中

>>> 1 in set1
True
>>> 5 in set1
False
>>>

 

四、不可变集合

Python中有一个 frozenset() 函数,可以将集合"冻起来",即将集合变成不可变集合

>>> set1 = frozenset(set1)
>>> set1.add(5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'
>>>

 

五、集合的方法

add()

向集合添加一个元素

>>> set1 = {1,2,3}
>>> set1
{1, 2, 3}
>>> set1.add(4)
>>> set1
{1, 2, 3, 4}
>>>

 

clear()

清空集合里的元素

>>> set1 = {1,2,3,4}
>>> set1
{1, 2, 3, 4}
>>> set1.clear()
>>> set1
set()
>>>

 

copy()

浅copy一个集合

>>> set1 = {1,2,3}
>>> set2 = set1.copy()
>>> set1
{1, 2, 3}
>>> set2
{1, 2, 3}
>>>

 

difference()

差集

>>> set1 = {1,2,3}
>>> set2 = {2,3,4}
>>> set1.difference(set2)
{1}
>>> set2.difference(set1)
{4}
>>>

 

difference_update()

差集更新:即将两个集合的差集赋给第一个集合

>>> set1 = {1,2,3}
>>> set2 = {2,3,4}
>>> set1.difference_update(set2)
>>> set1
{1}
>>>

 

discard()

删除集合中的元素,如果元素不存在,则什么也不做,如果元素存在,就删除它

>>> set1 = {1,2,3}
>>> set1.discard(1)
>>> set1
{2, 3}
>>> set1.discard(4)
>>> set1
{2, 3}
>>>

 

intersection()

取交集:即两个集合都有的元素

>>> set1 = {1,2,3}
>>> set2 = {2,3,4}
>>> set1.intersection(set2)
{2, 3}
>>> set2.intersection(set1)
{2, 3}
>>>

 

intersection_update()

交集更新:即将两个集合的交集赋给第一个集合

>>> set1 = {1,2,3}
>>> set2 = {2,3,4}
>>> set1.intersection_update(set2)
>>> set1
{2, 3}
>>>

 

isdisjoint()

判断两个集合是否有空交集,如果两个集合有一个空交集,返回 True,否则返回False

>>> set1 = {1,2,3}
>>> set2 = {2,3,4}
>>> set3 = {5,6}
>>> set1.isdisjoint(set2)
False
>>> set1.isdisjoint(set3)
True
>>>

 

issubset()

判断set1是不是set2的子集

>>> set1 = {1,2,3}
>>> set2 = {1,2,3,4}
>>> set3 = {2,3,4}
>>> set1.issubset(set2)
True
>>> set1.issubset(set3)
False
>>>

 

issuperset()

判断set1是不是set2的父集

>>> set1 = {1,2,3}
>>> set2 = {1,2,3,4}
>>> set3 = {2,3,4}
>>> set2.issuperset(set1)
True
>>> set2.issuperset(set2)   # 一个集合即是其本身的父集,也是其本身的子集
True
>>>

 

pop()

随机弹出集合里的某个元素

>>> set1 = {1,2,3}
>>> set1.pop()
1
>>> set1.pop()
2
>>> set1
{3}
>>>

 

remove(x)

移除集合元素x

>>> set1 = {1,2,3}
>>> set1.remove(2)
>>> set1
{1, 3}
>>>

 

symmetric_difference()

对称差集:返回两个集合中相互都没有的元素组成的集合

>>> set1 = {1,2,3}
>>> set2 = {2,3,4}
>>> set1.symmetric_difference(set2)
{1, 4}

 

symmetric_difference_update()

对称差集更新:即将两个集合的对称差集的结果赋给第一个集合

>>> set1 = {1,2,3}
>>> set2 = {2,3,4}
>>> set1.symmetric_difference_update(set2)
>>> set1
{1, 4}

 

union()

取并集:返回两个集合中所有元素

>>> set1 = {1,2,3}
>>> set2 = {2,3,4}
>>> set2.difference(set1)
{4}
>>> set1.union(set2)
{1, 2, 3, 4}
>>> set2.union(set1)
{1, 2, 3, 4}
>>>

 

update()

更新集合

>>> set1 = {1,2,3}
>>> set1.update([4,5])
>>> set1
{1, 2, 3, 4, 5}
>>>

 

六、集合内容补充

除了用集合的方法来操作集合,还可以用操作符,其对应关系如下:

操作符 含义 使用方法 等价于
< 子集 set1<set2 issubset()
| 并集 set1|set2 union()
& 交集 set1&set2 intersection()
- 差集 set1-set2 difference()
^ 对称差集 set1^set2 symmetric_difference()

 

posted @ 2018-07-19 20:49  SuperCodeX  阅读(310)  评论(0编辑  收藏  举报