欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-02 19:21:32
...

在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