云边日落 金玉其外,败絮其中。(明·刘基·卖柑者言)
博主 云边日落
渝ICP备2021002886号-1渝公网安备50022502000591号博主 11月5日 在线自豪地使用 Typecho 建站搭配使用 🌻Sunny 主题当前在线 1 人
歌曲封面 未知作品
  • 歌曲封面“魔女の宅急便”~ルージュの伝言松任谷由実

渝ICP备2021002886号-1

渝公网安备50022502000591号

网站已运行 4 年 152 天 17 小时 16 分

Powered by Typecho & Sunny

2 online · 42 ms

Title

集合浅谈

酒笙

·

·

255次阅读
python
Article
⚠️ 本文最后更新于2021年07月12日,已经过了1228天没有更新,若内容或图片失效,请留言反馈
7fa5b2ed1f6fd502eb741dd5fd4bcce5 - 副本.jpg

Python集合

在前面的学习中,我们已经初步的认知了,列表、元组和字典,今天我们来看拿一下python中,唯一无序且元素唯一的数据类型——集合(set)

集合是什么

在学习之前,我们先来简单的了解一下集合是什么。首先集合是一个无序不重复的一个集合,同时集合中的元素内容是不可变类型。

集合的使用

我们在前面的学习中基本可以看到, ()用来表示元组、 {}用来表示字典, []用来表示列表,那么用什么来表示集合呢?
其实集合可以用 {}来表示,也可以用 set函数来表示, 注意:创建一个空集合必须用 set() 而不是 ☑️,因为 ☑️ 是用来创建一个空字典 。我们来看一下代码格式。

♾️ python 代码:
my_set = {元素1,元素2,...}

我们来看一下简单的代码实现:

♾️ python 代码:
my_set ={1,2,3,4,5,6,"jiusheng","酒笙","酒笙"}
print(my_set)

这里我们可以看到,有重复元素 酒笙 ,前面我们说过,集合是唯一的,所以这里, 酒笙会不会重复出现呢?让我们来看一下运行结果。

♾️ python 代码:
{1, 2, 3, 4, 5, 6, 'jiusheng', '酒笙'}

很明显, 酒笙这一个重复元素没有出现两次,这是因为集合的元素是唯一的 ,重复的元素最后都会被舍去。

记得注意,集合的内容是不可变的,所以说,如果集合中有了可变的元素,就会报错,例子如下:

♾️ python 代码:
my_set ={1,2,3,4,5,6,["酒笙","酒笙"]}
print(my_set)

运行后报错,报错内容如下:

♾️ python 代码:
    my_set ={1,2,3,4,5,6,["酒笙","酒笙"]}
TypeError: unhashable type: 'list'

set 函数定义集合

通过 set 定义空集合

♾️ python 代码:
my_set =set()
print(type(my_set))

结果提示:

♾️ python 代码:
<class 'set'>

set函数转换字符串

♾️ python 代码:
my_set =set("酒笙还是那么优秀")
print(my_set)

运行结果如下:

♾️ python 代码:
{'是', '还', '那', '秀', '酒', '么', '优', '笙'}

我们可以很清楚的看到,在集合里面,所有的元素都是无序的。
我们来看一下集合对元组的去重:

♾️ python 代码:
a_typle = ("酒笙","还是","那么","优秀","酒笙")
b_set = set(a_typle)
print(b_set)

运行结果如下:

♾️ python 代码:
{'那么', '优秀', '还是', '酒笙'}

集合的基本操作

在学习之前我们来看一下集合的主要操作符号

  • | 表示并集
  • & 表示交集
  • - 表示差集
  • ^ 表示对称差集

交集(intersection)

交集就是求两个集合共有的元素。

♾️ python 代码:
a = {"酒笙","还是","那么","优秀"}
b = {"优秀"}
c = a & b
print(c)

我们来看一下运行结果:

♾️ python 代码:
{'优秀'}

并集(union)

并集就是取所有集合的所有元素,如果出现重复的保留一个。使用符号 | 或者 union 方法完成。

♾️ python 代码:
a = {"酒笙","还是","那么","优秀"}
b = {"优秀"}
c = a | b
print(c)
#union方法
d = a.union(b)
print(d)

运行结果如下:

♾️ python 代码:
{'酒笙', '那么', '优秀', '还是'}
{'酒笙', '那么', '优秀', '还是'}

差集(difference)
对于求集合的差集与交并集不同,有个先后顺序问题,例如属于 A 但不属于 B 表示为 A-B,同理属于 B 但不属于 A,表示为 B-A。
差集的符号是 -,可以使用 difference 方法进行运算。

♾️ python 代码:
a = {"酒笙","还是","那么","优秀"}
b = {"优秀"}
c = a - b
print(c)
#difference方法
d = a.difference(b)
print(d)

运行结果如下:

♾️ python 代码:
{'那么', '还是', '酒笙'}
{'那么', '还是', '酒笙'}

这里我们可以试着吧 c = a-b试着改成 c = b - a运行看一下结果,后面的difference也是如此,看一下结果,好好理解一番。

对称差集(symmetric difference)

A 与 B 两个集合,如果想要获得属于 A 或者 B 集合的元素,但又不要属于 A 且属于 B 的元素,这时就是对称差集的应用场景了。
对称差集的符号是 ^,方法名是 symmetric_difference。

♾️ python 代码:
a = {"酒笙","还是","那么","优秀"}
b = {"优秀"}
c = a ^ b
print(c)
#symmetric_difference方法
d = a.symmetric_difference(b)
print(d)

运行结果如下:

♾️ python 代码:
{'那么', '酒笙', '还是'}
{'那么', '酒笙', '还是'}

上述代码就会输出既不属于 A 也不属于 B 的元素,即对称差集。

集合的方法

1、添加元素
语法格式如下:

♾️ python 代码:
my_set.add(待添加元素)

演示代码如下:

♾️ python 代码:
a = {"酒笙","还是","那么","优秀"}
a.add("优秀")
print(a)

运行结果如下:

♾️ python 代码:
{'还是', '那么', '酒笙', '优秀'}

还有一个方法,也可以添加元素,且参数可以是列表,元组,字典等,语法格式如下:

♾️ python 代码:
my_set.update(待添加元素)

实际演示如下:

♾️ python 代码:
a = {"酒笙","还是","那么","优秀"}
a.update("优秀",[1,2,3],{"嘿嘿"})
#添加了有列表,和字典
print(a)

运行结果如下:

♾️ python 代码:
{1, 2, '优秀', 3, '还是', '那么', '秀', '优', '酒笙', '嘿嘿'}

移除元素

语法格式如下:

♾️ python 代码:
my_set.remove(待删除元素)

具体演示代码如下:

♾️ python 代码:
a = {"酒笙","还是","那么","优秀"}
a.remove("酒笙")
print(a)

运行结果如下:

♾️ python 代码:
{'优秀', '那么', '还是'}

discard 方法可以删除集合元素,如果元素不存在不会报错。

♾️ python 代码:
a = {"酒笙","还是","那么","优秀"}
a.discard("酒笙")
print(a)
#删除没有的元素不会报错
a.discard("哈哈哈")
print(a)

运行结果如下:

♾️ python 代码:
{'还是', '优秀', '那么'}
{'还是', '优秀', '那么'}

我们再来介绍有个 pop 方法为随机删除一个元素,被删除的元素会被返回,即可以用一个变量接收被删除的元素,如果集合为空使用 pop 会报错

♾️ python 代码:
a = {"酒笙","还是","那么","优秀"}
a.pop()
print(a)
#空集合使用pop会报错
b = set()
b.pop()
print(b)

运行内容如下:

♾️ python 代码:
{'优秀', '还是', '酒笙'}
#下面是报错内容
KeyError: 'pop from an empty set'

clear 方法删除集合内的所有元素

♾️ python 代码:
a = {"酒笙","还是","那么","优秀"}
a.clear()
print(a)

运行结果如下:

♾️ python 代码:
set()

集合可用的内置函数

max、min、sum
以上内置函数作用域集合与列表使用规则一致,自行测试即可。

len
获取集合元素的数量。

sorted
使用该函数可以对集合进行排序。

总结

关于集合我们就先介绍到这里,还有很多知识,我们在以后的学习中在进行学习,最后,学习的你,真的很好看!
相关文档
菜鸟教程
csdn

现在已有 1 条评论,3 人点赞
Comment:共1条
发表
  1. 头像
    @
    hdq
    元组
    · Windows · Chrome · 中国重庆市江津区移动

    👍

    💖

    💯

    💦

    😄

    🪙

    👍 0 💖 0 💯 0 💦 0 😄 0 🪙 0
搜 索 消 息 足 迹
你还不曾留言过..
你还不曾留下足迹..
博主 不再显示
博主