如何找到多个列表之间的交集?

问题描述

我有多个数组,我想找到它们之间的交集我尝试了以下代码

my_lists = [['Finish','Purpose','Form','Series','Tiles Type','Finishing'],['Color','Thickness','Usage/Application','Brand','Marble Type','Material'],'Finishing','Origin','Thickness'],['Thickness','Size','Material Grade',['Usage/Application','Material','Shape'],['Application Area','Color','Coverage Area'],'Form'],['Unit Size (mm X mm)','Usage','Brand'],['Marble Type','Unit Size (mm X mm)','Color'],['color'],'Finish','Marble Type'],'Unit Size (mm X mm)'],'Usage'],'Packaging Size','Packaging Type'],'Back Lit',['Material','Pattern',['Form','Application Area','Colour','Series'],'Surface Finish'],['Brand','Finish'],'Unit Size','Features',['Usage',['Finish','Pattern'],'Category Type'],'Surface Finishing','Stone Form','Size']]
print(set.intersection(*map(set,list(my_lists ))))

但我得到一个空集

set()

我真正想要的是在所有列表中找到共同的元素

解决方法

示例中的所有列表之间没有共同元素 - 您可以看到第一个和第二个列表完全不相交。因此,一个空集的正确返回答案。此操作只会查找 EACH 列表中的所有字符串。

编辑

如果您的目标是找到永远重复的字符串,我会执行以下操作:

import numpy as np
my_lists = [['Finish','Purpose','Form','Series','Tiles Type','Finishing'],['Color','Thickness','Usage/Application','Brand','Marble Type','Material'],'Finishing','Origin','Thickness'],['Thickness','Size','Material Grade',['Usage/Application','Material','Shape'],['Application Area','Color','Coverage Area'],'Form'],['Unit Size (mm X mm)','Usage','Brand'],['Marble Type','Unit Size (mm X mm)','Color'],['color'],'Finish','Marble Type'],'Unit Size (mm X mm)'],'Usage'],'Packaging Size','Packaging Type'],'Back Lit',['Material','Pattern',['Form','Application Area','Colour','Series'],'Surface Finish'],['Brand','Finish'],'Unit Size','Features',['Usage',['Finish','Pattern'],'Category Type'],'Surface Finishing','Stone Form','Size']]
big_list = [x for a_list in my_lists for x in a_list]
unique_strings,number_of_appearances = np.unique(big_list,return_counts=True)
index = np.flip(np.argsort(number_of_appearances))
print(unique_strings[index],number_of_appearances[index])

这会展平您的列表列表,找到唯一的字符串,并按它们出现的次数(最多到最少)对它们进行排序。第一个字符串将是“找到最多的元素”,任何计数超过 1 的字符串都会在多个列表中重复。

,

我认为这会有所帮助;

from functools import reduce
reduce(numpy.intersect1d,(my_lists))

来源: https://numpy.org/doc/stable/reference/generated/numpy.intersect1d.html