【python】实现寻找多个数组/列表的交集/并集/差集
最近搞了个小项目,想要寻找相同的信号通路,我有几个信号通路的列表,想要求它们的交集,然后,去网上寻找求多个数组交集的办法,结果却都是这样的:a = 【1,2,3】b = 【2,3,4】c = 【3,4,5】r = list(set(a).intersection(b,c))print(r)就需要在intersection函数后面输入所有的数组名称,这也太僵硬了,我有50个数组的话岂不是要输到天荒地
最近搞了个小项目,想要寻找相同的信号通路,我有几个信号通路的列表,想要求它们的交集,然后,去网上寻找求多个数组交集的办法,结果却都是这样的:
a = 【1,2,3】
b = 【2,3,4】
c = 【3,4,5】
r = list(set(a).intersection(b,c))
print(r)
就需要在intersection函数后面输入所有的数组名称,这也太僵硬了,我有50个数组的话岂不是要输到天荒地老?
下面进入正文,通过csv文件读取,整合到嵌套列表中,统计了很多信号通路,读取方法如下:
【Python】批量读取csv文件的第一列,并整合到嵌套列表中_咋回事儿啊?的博客-CSDN博客
笔者的数据结构如下(当然不止四个,只是举例):
[[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7],[4,5,6,7,8]]
目标:['4','5']
代码思路如下:
首先,我们要把列表进行合并,使用的是extend函数,把数据结构变成下面这样:
[1,2,3,4,5,2,3,4,5,6,3,4,5,6,7,4,5,6,7,8]
import numpy as np
import pandas as pd
#将嵌套列表转换为普通列表,将多个列表中的数据整合到一个列表a中
for k in range(1,len(totallist)):
a = totallist[0]
a.extend(totallist[k])
然后通过字典统计重复元素数量,并通过字典输出
dict1 = {}
for ele in a:
if ele not in dict1.keys():#如果列表里面的元素不在字典key值中,那么创建一个新的key并统计元素出现的次数
dict1[ele] = a.count(ele)
dict1 差不多长这样
{'1':1, '2':2, '3':3, '4':4, '5':4, '6':3, '7':2, '8':1}
然后就可以通过元素数量寻找交集,并集,差集,下面是寻找交集的方法。
#如果元素出现的次数等于数组的数量,那么这个元素就是多个数组的交集元素
max_key = [] #将结果储存在列表中
for e,f in dict1.items():
if f == len(totallist):
max_key.append(e)
print(max_key)
#寻找差集
#如果元素出现的次数等于1,那么这个元素就是多个数组的差集元素
max_key = [] #将结果储存在列表中
for e,f in dict1.items():
if f == 1:
max_key.append(e)
print(max_key)
#寻找并集直接打印key值即可
max_key = [] #将结果储存在列表中
for e,f in dict1.items():
max_key.append(e)
print(max_key)
结果截图:
更多推荐
所有评论(0)