Python集合(3分钟极速掌握)

在Python中,集合是一个无序的不重复的序列。一般使用{}或者set()函数来创建。Tips:创建一个空的集合只能使用set(),因为{}是创建空字典用的,这个上节我们提到过。下面开始我们的快速学习:
创建一个空集合,我们先看下他们的结构:

a=set()
print(type(a),a)
>>>
< class 'set'> set()

可以看到,class set 是我们要的集合结构。下面我们看下集合是怎么初始化的:

a=[1,2,3,4,5]
print(type(a),a)
b=set(a)
print(type(b),b)
>>>
<class 'list'> [1, 2, 3, 4, 5]
<class 'set'> {1, 2, 3, 4, 5}

在这里我们先创建了一个list,然后把list当做参数传给了set这样我们就得到了我们想要的集合。这里有人要问了,初始化集合必须要先初始化一个list么?不着急,我们换一个类型试试,看能不能创建集合:

a=1
b=2
c=set({a,b})
print(type(c),c)
>>>
<class 'set'> {1, 2}

先创建了两个int类型,然后在初始化集合的时候,把他们两个都传了进去,果然还是可以得到我们想要的结果。
就这一种初始化方法么?当然不是了,看下面:

a=set([1,2,3,4,5,6])
print(type(a),a)
>>>
<class 'set'> {1, 2, 3, 4, 5, 6}

我们同样可以直接把上面的两步合成一步来搞定。
开头我们就说了,集合是一个无序不重复的序列,何以证明?我们给他初始化的时候放一些重复的数值试试:

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

果然,如果我们传了重复的值,Python会自动给我们精简成1个。有同学问,上面那个{}不是一个字典初始化的方法么?为什么在这边成了集合的初始化方法了么?要记得,字典是什么?是一个键值对的存在,写个例子对比一下:

a={"a":1,"b":2}
print(type(a),a)
>>>
<class 'dict'> {'a': 1, 'b': 2}

对比一下,一样么?是吧。。。
下面我们说一下这个集合的操作,既然它是数据类型的集合,那么它肯定存在添加,删除,更新等操作,我们一个一个看一下,这个知道就行不需要去刻意记住。
添加:add()

a=set()
a.add(1)
a.add(2)
print(a)
>>>
{1, 2}

更新:update()

a=set({1,2,3,4,5})
a.update([3,6,7])
print(a)
>>>
{1, 2, 3, 4, 5, 6, 7}

原来只有12345数字,更新的参数传的是367,由于3已经存在,根据集合不重复条约3直接抛弃,然后67不存在,那么就加入进来,最后形成1234567这样一个集合。
删除:remove()

a=set({1,2,3,4,5})
a.remove(1)
print(a)
>>>
{2, 3, 4, 5}

这个没有什么好说的
删除操作除了remove()函数,还有一个pop()函数可以实现这个功能。有意思的事情来了,官网上说pop()函数会随机从集合中弹出一个子项,但是经过我多次试验,基本上每次弹出的是第一个子项,大家可以自己试试。

a=set({1,2,3,4,5})
a.pop()
print(a)
>>>
{2, 3, 4, 5}

另外,pop()弹出的值我们是可以取到的。
在集合中除了上面的添加删除等操作,对于我们来说最重要的并不是这些操作,在后面人工智能的使用中,我们用的最多的其实是求交集并集等操作。
并集:union()

a=set({1,2,3,4,5})
b=set({9,8,7,6,5})
print(a.union(b))
>>>
{1, 2, 3, 4, 5, 6, 7, 8, 9}

本来是两个独立的集合,现在把他们合并成了一个大集合。Union()其实说白了就是一个“|”的操作所以上面的代码也可以这么写:

a=set({1,2,3,4,5})
b=set({9,8,7,6,5})
print(a|b)
>>>
{1, 2, 3, 4, 5, 6, 7, 8, 9}

这样我们得到的结果是一样的。
交集:intersection()

a=set({1,2,3,4,5})
b=set({9,8,7,6,5})
print(a.intersection(b))
>>>
{5}

同样这也是一个“&”操作,一样可以这么写:

a=set({1,2,3,4,5})
b=set({9,8,7,6,5})
print(a&b)
>>>
{5}

得到同样的结果。
既然有交集和并集,那么能不能列出两个集合的不同之处呢?

a=set({1,2,3,4,5})
b=set({9,8,7,6,5})
print(a.difference(b))
print(b.difference(a))
>>>
{1, 2, 3, 4}
{8, 9, 6, 7}

代码就不解释了,很简单。
当然,就算没有直接求不同的方法,我们也可以手动实现:

a=set({1,2,3,4,5})
b=set({9,8,7,6,5})
print(a-b)
print(b-a)
>>>
{1, 2, 3, 4}
{8, 9, 6, 7}

最后,我们还可以来求子集之间的关系:

a=set({1,2,3,4,5})
b=set({1,2,3})
print(b.issubset(a))
>>>
True

Issubset()函数就是来求是不是子集的问题。
当然有时候我们也以“<”来替代。有兴趣的同学可以把下面的例子看一下,找不同:

a=set({1,2,3,4,5})
b=set({1,2,3})
print(b.issubset(a))
print(b<=a)
print(b<a)
print(a.issubset(b))
print(a<=b)
print(a<b)
>>>
True
True
True
False
False
False

或者:

a=set({1,2,3,4,5})
b=set({1,2,3,4,5})
print(b.issubset(a))
print(b<=a)
print(b<a)
print(a.issubset(b))
print(a<=b)
print(a<b)
>>>
True
True
False
True
True
False
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值