专栏首页Python空间零基础学习 Python 之集合

零基础学习 Python 之集合

写在之前

大家好,这里是零基础学习 Python 系列,在这里我将从最基本的Python 写起,然后再慢慢涉及到高阶以及具体应用方面。我是完全自学的 Python,所以很是明白自学对于一个人的考验,所以在这里我会尽我最大的努力,把 Python 尽可能简单的表述清楚,让更多想要学习 Python 的朋友能够入门。同时写这个教程也算是对自己之前所学知识的一个巩固和提高,喜欢的朋友们可以点个关注,有问题欢迎随时和我交流。本文所有的代码编写均是Python3 版本。

今天要讲的集合是和我们之前讲过的字符串,列表,元组,字典一样,也是一种数据类型,用 set 表示,翻译成中文叫“集合”。如果之前的数据类型忘记了,可以通过下面的连接去看。

零基础学习 Python 之字符串

零基础学习 Python 之列表 ( 一 )

零基础学习 Python 之列表 ( 二 )

零基础学习 Python 之元组

零基础学习 Python 之字典

集合的创建

集合的特点是元素无次序,不可重复,有的可变,有的不可变。我们之前写元组的时候说过它是列表的部分特征和字符串的部分特征的并集,那么这里的集合就是列表的部分特征和字典的部分特征的并集。

创建集合有两种方法,一种是 set(),一种是 { },在这里的话我们不推荐使用后一种,因为我们已经把 { } 给了字典,要避免歧义,在这里说后一种方法的原因是希望你知道有这么一种方法建立集合,免得在某个地方看到的时候你会奇怪为什么字典的格式不对,其实它可能是集合。

>>> a = set("leey")
>>> a
set(['y', 'e', 'l'])
>>> b = set(['python','c++','java','c++'])
>>> b
set(['python', 'java', 'c++'])
>>> c = {'a','b','c','a'}
>>> c
set(['a', 'c', 'b'])

看到上面的例子了吗?输出无序,重复的元素也被去掉,这是一种非常简洁高效的元素去重方式。

集合的方法

集合的方法有很多,还记得怎么看吗?用 dir(set) 就可以看到不少集合的方法,每个函数的具体使用方法可以用 help() 找到,我在这里主要讲几个常用的。

1.add & update

add 是在集合中添加元素,在这里有一点要注意建立空集合的时候要用 set 而不是 { },请看下面的例子:

>>> a = {}
>>> type(a)
<type 'dict'>
>>> a = set()
>>> type(a)
<type 'set'>
>>> a.add('rocky')
>>> a
set(['rocky'])

看到了吗?虽然字典和集合都用 { },但是直接用 a = { },得到的是字典而不是集合。在这里提一嘴,type() 函数是用来查看对象的类型的函数。

update 是将另一个集合合并过来的方法。

>>> a = set([1,2,3])
>>> b = set(['a','b','c'])
>>> a.update(b)
>>> a
set(['a', 1, 2, 3, 'b', 'c'])
>>> b
set(['a', 'c', 'b'])

2.pop & remove & clear

pop 每次删除一个,并返回删除的结果,因为集合没有顺序,所以是随机删除,并且 pop 没有参数。

>>> a = set([1,2,3])
>>> a.pop()
1
>>> a
set([2, 3])
>>> a.pop(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: pop() takes no arguments (1 given)

remove 也是删除,它没有返回值,但是它可以删除指定元素,但是删除的必须是集合中的元素,否则会报错。

>>> a = set([1,2,3])
>>> a.remove(1)
>>> a
set([2, 3])
>>> a.remove(4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 4

clear 也是删除,但它是集合删除中惹不起的存在,因为它直接会把集合清空。

>>> a = set([1,2,3])
>>> a.clear()
>>> a
set([])

集合的运算

集合的运算和我们数学中在我看来是一个样的,分为元素和集合,集合和集合。

首先来说元素和集合。元素和集合只有一种关系,那就是属于或者不属于某个集合。

>>> a = set([1,2,3])
>>> 1 in a
True
>>> '1' in a
False

然后再来说集合和集合。集合和集合比较常见的有 5 种关系,下面容我一一道来(假设我们有两个集合 A 和 B)。

1.A 与 B 相等

>>> a = set([1,2,3])
>>> b = set([1,2,3])
>>> a == b
True
>>> b = set(['a','b','c'])
>>> a == b
False

2.A 是 B 的子集

子集的意思就是 A 的元素在 B 里都有且 B 的元素个数比 A 多。可以用 A < B 或者 A.issubset(B) 判断,如果是 True 则表示 A 是 B 的子集。

>>> a = set([1,2,3])
>>> b = set([1,2,3,'a','b'])
>>> a < b
True
>>> a.issubset(b)
True

3.A 和 B 的并集

并集的意思就是 A 和 B 中的所有元素,可以用 A | B 或者 A.union(B) 表示,吧并集的结果是生成一个新的对象,并不是在这两个集合上的扩充。

>>> a = set([1,2,3])
>>> b = set([1,2,3,'a','b'])
>>> c = a | b
>>> c
set(['a', 1, 2, 3, 'b'])
>>> c = a.union(b)
>>> c
set(['a', 1, 2, 3, 'b'])

4.A 和 B 的交集

交集的意思就是 A 和 B 中公有的元素。可以用 A & B 或者 A.intersection(B) 表示,交集的结果也是生成一个新的对象。

>>> a = set([1,2,3])
>>> b = set([1,2,3,'a','b'])
>>> c = a & b
>>> c
set([1, 2, 3])
>>> c = a.intersection(b)
>>> c
set([1, 2, 3])

5.A 相对 B 的补集

补集也叫差集,意思就是只属于 A 的元素但是不属于 B 的元素,你可以理解成 A 集合中的元素去掉 A 与 B 的交集。可以用 A - B 或者 A.difference(B) 表示。

>>> a = set(['a','b','c',1,2,3])
>>> b = set(['a','b',1,4])
>>> a - b
set(['c', 3, 2])
>>> a.difference(b)
set(['c', 3, 2])

还有一点我想说的是,用这些运算的时候最好用带名字的函数,因为使用运算符的话可读性很差。

写在最后

到本篇为止,Python 中常见的对象类型我都写完了,算是完成了一个小目标,接下来的一个阶段的话开始写 Python 的语句方面,包括 if else,for 循环啦等等,因为在了解了基本的对象类型以后,就要学会如何去使用它们。

最后感谢你能看到这里,希望我写的东西能够让你有到收获,但是我还是希望我在文章里插入的代码,你们能自己动手试一下,都很简单。原创不易,每一个字,每一个标点都是自己手敲的,所以希望大家能多给点支持,该关注关注,该点赞点赞,该转发转发,有什么问题欢迎在后台联系我,也可以在公众号找到我的微信加我。

本文分享自微信公众号 - Python空间(Devtogether)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python Django使用HttpResponse返回图片并显示

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    菲宇
  • Python操作MongoDB

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    菲宇
  • 史上最全 | 数据分析技能详细拆解,一张图覆盖全流程知识细节和资源推荐(附下载)

    而基于这些数据的分析,可以挖掘到非常多有价值的信息,这些信息正在成为大多数企业业务增长、迭代更新的关键。

    数据派THU
  • 奔走相告,Python 3.8.0 正式发布!

    那么,这次新发布的 Python 3.8.0 有哪些重要的改进呢?以下是是 Python 3.8 相比 3.7 的新增特性。

    小草AI
  • Python进阶之Matplotlib入门(三)

    Matplotlib是Python的画图领域使用最广泛的绘图库,它能让使用者很轻松地将数据图形化以及利用它可以画出许多高质量的图像,是用Python画图的必备技...

    HuangWeiAI
  • python的super()的作用和原理

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    菲宇
  • jieba分词器详解及python实战

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    菲宇
  • BERT 是如何分词的

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    Alan Lee
  • Jenkins+Ansible+GitLab持续交付平台搭建-第3篇

    遇到错误:configure: error: no acceptable C compiler found in $PATH

    Criss@陈磊
  • Python进阶之Matplotlib入门(二)

    Matplotlib是Python的画图领域使用最广泛的绘图库,它能让使用者很轻松地将数据图形化以及利用它可以画出许多高质量的图像,是用Python画图的必备技...

    HuangWeiAI

扫码关注云+社区

领取腾讯云代金券