去重是门学问
深刻体会到做程序开发,就绕不开数据!!!
学过了Python,对于基本去重都是从接触过set这个函数的开始的,它能够快速的给列表去重。当然在第一次接触它之前我们大多是这么操作的。。。
a = [1,1,2,2,3,3,4,4,5,5]
b = []
for i in a:
if i not in b:
b.append(i)
print(b)
[1,2,3,4,5]
在for当中嵌套if,而且为了去重a,还定义了一个空列表b,嗯。。。这样很不python。于是百度之后了解到set
,感叹python还有如此简单的办法。。。
a = [1,1,2,2,3,3,4,4,5,5]
set_a = set(a)
print(set_a)
{1,2,3,4,5}
print(set_a)
<class 'set'>
[]变成了{},list就变为了set,。。。呃,所以我们一般这么使用set:list(set(*))
,这样就能保证去重之后的仍旧是一个列表!在python当中,元组、列表、集合可以相互转化。
那么两个列表呢
两个列表的情况下,仍旧绕不开或且非的问题——用中学的知识点来讲,就是并集,交集,差集。最近就遇到类似的需求,需要比较两个数据,判断非的问题,索性都整理下。
最简单的——并集(a∪b)
- 基础版,思路有很多
a = [1,2,3,4]
b = [3,4,5,6]
c = b
for i in a:
if i not in c:
c.append(i)
print(a)
[1,2,3,4,5,6]
- 还是
set
c = a + b
print(list(set(c)))
[1,2,3,4,5,6]
set().union
c = list(set(a).union(set(b)))
差集(ab)
- 基础版,在多定义一个空list即可,仅限
a = [1,2,3,4,5,6,7,8]
b = [1,3,5,7,9]
c = []
for i in b:
if i not in a:
c.append(i)
- 升级版a
c = [i for i in a if i not in b]
- 升级版plus
c = list(set(b).difference(set(a))
交集(a∩b)
- 基础版
a = [1,2,3,4,5,6,7,8]
b = [1,3,5,7,9]
c = []
for i in b:
if i in a:
c.append(i)
来了来了set
数学用法
a = [1,2,3,4,5,6,7,8]
b = [1,3,5,7,9]
# 交集
jiao = set(a) & set(b)
print(jiao)
{1, 3, 5, 7}
# 差集
cha = set(a) ^ set(b)
print(cha)
{2, 4, 6, 8, 9}
# 合集
print(set(a) | set(b))
{1, 2, 3, 4, 5, 6, 7, 8, 9}
set之间的运算:
集合 表示符 含义 交集 &
返回一个新的集合,包括同时在集合 x 和y中的共同元素 并集 |
返回一个新的集合,包括集合 x 和 y 中所有元素 差集 -
返回一个新的集合,包括在集合 x 中但不在集合 y 中的元素 补集 ^
返回一个新的集合,包括集合 x 和 y 的非共同元素