python 集合

集合是一个无序的,不重复的数据组合,它的主要作用如下:

去重,把一个列表变成集合,就自动去重了

关系测试,测试两组数据之前的交集、差集、并集等关系

去重

将列表转换为集合

使用set()方法

list_1 = [1,2,4,5,2,6,7,4,8]
list_1 = set(list_1)
print(list_1,type(list_1))

执行输出

{1, 2, 4, 5, 6, 7, 8}

结果有点像字典的格式,但它不是字典,是一个集合。里面数据,已经去重了。

集合和字典一样,也是无序的。

交集

使用intersection()方法,将2个数据相同的部分提取出来

list_1 = [1,2,4,5,2,6,7,4,8]
list_1 = set(list_1)
list_2 = set([2,55,46,91,4,8])
print(list_1.intersection(list_2))

执行输出

{8, 2, 4}

并集

使用union()方法,将2个数据合并,去除重复的元素

list_1 = [1,2,4,5,2,6,7,4,8]
list_1 = set(list_1)
list_2 = set([2,55,46,91,4,8])
print(list_1.union(list_2))

执行输出

{1, 2, 4, 5, 6, 7, 8, 46, 55, 91}

差集

我有,你没有的部分

list_1 = [1,2,4,5,2,6,7,4,8]
list_1 = set(list_1)
list_2 = set([2,55,46,91,4,8])
print(list_1.difference(list_2))

执行输出

{1, 5, 6, 7}

说明: 拿list_1每一个元素去list_2中查找,如果有,直接忽略,否则就直接输出。

也可以反过来,用list_2向list_1求差集

print(list_2.difference(list_1))

执行输出

{91, 46, 55}

子集

子集是一个数学概念:如果集合A的任意一个元素都是集合B的元素,那么集合A称为集合B的子集。

也就是说,A集合的所有元素都包含在B集合中,A就是B的子集

print(list_2.issubset(list_1))

执行输出 False

超集

超集定义:如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S1就是S2的一个超集。

#判断list_2是否是1的超集
print(list_2.issuperset(list_1))

执行输出 False

对称差集

将2个集合合并,删除相同的元素。

print(list_1.symmetric_difference(list_2))

执行输出

{1, 7, 5, 6, 55, 91, 46}

判断是否是相交集,返回bool值

list_1 = [1,2,4,5,2,6,7,4,8]
list_1 = set(list_1)
list_2 = set([2,55,46,91,4,8])
list_3 = set([3,9,10])
print(list_3.isdisjoint(list_2))

执行输出 True

集合3中的每一个元素,在集合2中,一个都没找到,返回True,否则返回false

哪怕只有一个元素找到了,也会返回false

上面的集合关系比较,都是用英文字母方法做的,也可以用符号表示

交集

print(list_1 & list_2)

执行输出

{8, 2, 4}

并集

print(list_1 | list_2)

执行输出

{1, 2, 4, 5, 6, 7, 8, 46, 55, 91}

差集

print(list_1 - list_2)

执行输出

{1, 5, 6, 7}

对称差集

print(list_1 ^ list_2)

执行输出

{1, 7, 5, 6, 55, 91, 46}

基本操作

添加

list_1.add(999)
print(list_1)

执行输出

{1, 2, 4, 5, 6, 7, 8, 999}

添加多个

list_1.update([88,77,66])

执行输出

{1, 2, 66, 4, 5, 6, 7, 8, 77, 88}

删除

list_1.remove(2)
print(list_1)

执行输出

{1, 4, 5, 6, 7, 8}

问题来了,集合里面有2个数字2,该删除哪一个呢?

集合天生就是去重的,所以不存在这个问题,它里面的每一个值都是唯一的。

集合的长度

print(len(list_1))

执行输出 7

判断某个值是否存在集合中

print(1 in list_1)

执行输出 True

判断某个值不存在集合中

print(1 not in list_1)

执行输出 False

列表,字典,集合,字符串 都可以用in方法

随机删除并返回删除的元素

print(list_2.pop())

执行输出 2

删除一个不存在的数据

print(list_1.discard(888))

执行输出 None

为什么会返回 None 呢?因为discard()没有返回值,即使删除一个不存在的值,也不会报错

而remove()删除一个不存在的值,会报错。

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术沉淀

Python: 正则表达式实例透析

1113
来自专栏深度学习思考者

C++常见问题(二)——虚函数、类与结构、引用与值传递

一 文件输入输出的方式 C++定义了ifsteam、ofstream和fstream 3种类型以用来支持文件的输入输出。 二 异常 异常就是程序运行时出...

1856
来自专栏机器学习算法与Python学习

python: 函数详解

def square(x): return x**2 >>> square <function square at 0x031AA230> >>> dir(sq...

4817
来自专栏杂七杂八

python中sort与sorted

sort与sorted是python中的排序函数。它们的最大区别在于sort是定义在list中的,对list起作用。而sorted则可以排序所有的可迭代对象 ...

2708
来自专栏JetpropelledSnake

前端学习笔记之ES6快速入门

ES6新增了let命令,用于声明变量。其用法类似var,但是声明的变量只在let命令所在的代码块内有效。

1072
来自专栏小白的技术客栈

Python内置数据结构之集合

今天给大家介绍内置数据结构集合的用法。 看一下集合的思维导图: ? 集合的特点 元素是唯一的 元素是无序的,不是线性结构 集合元素是可hash的 聚合的含义和数...

3704
来自专栏PHP在线

五个值得深思的PHP面试题

面试题 Q6 $x应该是输出什么? $x = true and false; var_dump($x); 部分同学或许会第一时间想到false,实际上这里依...

2915
来自专栏有趣的Python

8-Java基础语法-Java方法

类,Scanner是一个类,sc是它实例化出的对象。nextInt()是从键盘获取一个整型值的方法,next()是从键盘获取一个字符串类型值的方法。这两个都是使...

2281
来自专栏desperate633

LintCode 最小差题目代码

给定两个整数数组(第一个是数组 A,第二个是数组 B),在数组 A 中取 A[i],数组 B 中取 B[j],A[i] 和 B[j]两者的差越小越好(|A[i]...

1032
来自专栏武军超python专栏

python组合数据类型及各种操作小总结

python中,一共有四种组合数据类型,他们分别是列表(list),元组(tuple),集合(set),字典(dict)。而这些数据类型分别都有什么作用?他们有...

1057

扫码关注云+社区