十、python 集合的定义与使用

依然范特西╮ 提交于 2021-02-17 02:20:27

一、集合的定义

定义:由不同元素组成的集合,集合是一组无序排列 可hash值,可作为字典的key。

特性:集合的目的是将不同的值存放在一起,不同的集合间用来做关系运算,无须纠结于集合中的单个值。

(1、不同元素组成 2、无序 3、集合中的元素必须是不可变类型)

 

二、集合的使用

1、声明集合

jihe = {1,2,3,4,5}

#与字典看上去类似,但是是不一样的。字典是 dict1 = {key:value,key2:value2,}需要key

 

(1)自动去重

注意,集合是有不同元素组成,所以即便里面的值重复了,也会去重。

例:

set1 = {1, 2, 4, 3, 3, 4, 4, 3, 3, 2, 2, 2, 2, 1}
print(set1)

运行结果

 

 (2)打印内容是无序的

set1 = {"陈司","怎能","","","大帅哥"}
print(set1)

运行结果

 

 2、添加元素 set.add() 方法

例:

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

运行结果

 

3、删除集合元素。

(1)set.pop() 与 set.remove()

set1 = {"s", 1, "234", 2}
# pop会从集合中随机删除一个数
v = set1.pop()
print(set1, "v = ", v)
# remove 可以传参数删除指定的值,但是要注意,如果传的值不存在会报错。慎用。
set1.remove(2)
print(set1)

运行结果

(2)set.discard()

与remove()用法相同,但是如果元素不存在,不会报错。

set1 = {"s", 1, "234", 2}
b = set1.discard("123123")
print(b)
set1.discard("s")
print(set1)

运行

 

三、集合的运算

 

在python 中,集合的概念,有点类似数学之中集合的概念。可以求出交集并集等运算操作。

 

1、交集 set.intersection()

场景:有两组学生,第一组学生,选修了语文课,第二组学生,选修了数学课。但是其中有一些学生即选修了语文,也选修了数学,要求快速定位到这种学生。

例1,非集合方式。

#学习数学的人
stu_shuxue = ["陈司","李大","王二"]
#学习语文的人
stu_yuwen = [ "陈司","王二" ]
#两者都学的人,先暂定为空
stu_double = []
#循环输出学习数学的人
for stu in stu_shuxue:
    #如果学习数学的人,也在stu_yuwen 学习语文的人里。就是两者都学的人。并追加到stu_double集合。
    if stu in stu_yuwen:
        stu_double.append(stu)
print(stu_double)

运行结果

 

 

例2,集合方式

stu_shuxue = {"陈司", "李大", "王二"}
stu_yuwen = {"陈司", "王二"}
#取交集
print(stu_shuxue.intersection(stu_yuwen))
#写法2
print(stu_shuxue&stu_yuwen)

运行

 

2、并集,set.union()方法

理解:把两个结合中所有元素组合在一起,并排重后取出结果。

场景:还是刚才的两组学生,求选修了数学和语文的全部同学名单。

stu_shuxue = {"陈司", "李大", "王二"}
stu_yuwen = {"陈司", "王二"}
#取并集
print(stu_shuxue.union(stu_yuwen))
#写法2
print(stu_shuxue | stu_yuwen)

运行

 

 

3、差集 set.difference()

理解:两个集合相减,A 减 B ,A 里有 1、2、3   B里有 2、3、4 如果 A 与B 的差集,会发现A 有 1 是B里没有的。所以A 减 B 等于 1 ,反过来 B 减 A 就等于4 ,因为4 是A 集合里没有的元素。

也就是说,发起差集的集合,会把自己有,而对方没有的元素得到。说的直白点,我是帅,高,富。 你是 丑 , 高,富。咱们都有高和富,我减去你就是帅。你减去我就是丑。

例:

set1 = {"陈司","","",""}
set2 = {"某人","","",""}
#方法1
print(set1.difference(set2))
#方法2
print(set1-set2)

 

 运行结果

 

4、交叉补集 set.symmetric_difference()

理解。集合A 是1、2、3 集合B 是 2、3、4 交叉补集就只保留  1 和 4 。因为 1 是 A 独有的, 4 是B 独有的。交叉补集会去掉共有的部分,只保留双方独有的部分。

场景:选修语文的有一组学生,选修数学的有一组学生。已知有的学生既选修了数学,又同时选修了语文,求只选修了一门课程的学生。这种情况就适合交叉补集。

#学习语文的
set_yuwen = {"陈司","A","B","C"}
#学习数学的 set_shuxue
= {"某人","A","B","C"}
#方法1
print(set_shuxue.symmetric_difference(set_yuwen))
#方法2
print(set_yuwen^set_shuxue)

运行结果

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!