Python 比较阵列的最快方法

Python 比较阵列的最快方法,python,arrays,list,shingles,Python,Arrays,List,Shingles,在此基础上,我需要最快的解决方案: 鉴于以下情况: m=['abc','bcd','cde','def'] r=[['abc','def'],['bcd','cde'],['abc','def','bcd']] 我想编辑这些对象(或生成的新对象),以便对于列表m中的每个元素,如果它在r的所有列表中存在的次数少于2次,则该元素将从m中删除,也将从r中出现的任何位置删除 因此,上述结果如下所示: ['abc','bcd','def'] …因为“cde”在r中只找到一次 更好的办法是: [2, 2

在此基础上,我需要最快的解决方案:

鉴于以下情况:

m=['abc','bcd','cde','def']
r=[['abc','def'],['bcd','cde'],['abc','def','bcd']]
我想编辑这些对象(或生成的新对象),以便对于列表m中的每个元素,如果它在r的所有列表中存在的次数少于2次,则该元素将从m中删除,也将从r中出现的任何位置删除

因此,上述结果如下所示:

['abc','bcd','def']
…因为“cde”在r中只找到一次

更好的办法是:

[2, 2, 1, 2]
…或r中列表中m元素的频率计数。 然后,根据数字,如果值满足特定条件,我可以根据输出的索引编辑r中的列表

例如,如果i为100,则删除r中每个列表的索引i

有一个循环的方法可以做到这一点,但它比一月份的糖蜜慢:

我的出发点是:

[[1 if mx in rx else 0 for mx in m] for rx in map(set, r)]
将产生以下结果:

[[1, 0, 0, 1], [0, 1, 1, 0], [1, 1, 0, 1]]

提前谢谢

这里有一行代码来获取计数:

print [sum([1 for _r in r if _m in _r]) for _m in m]
它给出了相同的结果,您已经写到:

[2, 2, 1, 2]

这里有一行代码可以获取计数:

print [sum([1 for _r in r if _m in _r]) for _m in m]
它给出了相同的结果,您已经写到:

[2, 2, 1, 2]

通过“从
m
r
中的所有位置删除”,您似乎希望将其提取以供其他用途-正确吗?这似乎是一个重要的区别。我不想用绝对最快的方法挂断电话,我会先将列表展平
r
,对展平的列表进行排序,然后数一数连续的相同条目的数量,然后查找
m
,以确定您是否保留该条目。@Tadhg McDonald Jensen-是的,这很重要。删除元素后,我不需要这些元素。通过“从
m
r
中的所有位置删除”,您似乎希望将其提取以供其他用途-正确吗?这似乎是一个重要的区别。我不想用绝对最快的方法挂断电话,我会先将列表展平
r
,对展平的列表进行排序,然后数一数连续的相同条目的数量,然后查找
m
,以确定您是否保留该条目。@Tadhg McDonald Jensen-是的,这很重要。我不需要删除元素,这是一个很好的开始。我现在需要做的就是能够使用结果列表中1的索引(索引=2)来告诉原始列表需要从所有子列表中删除“cde”(索引位置2),因此结果是r=[['abc','def'],['bcd'],['abc','def','bcd']]。如果结果值大于100,我也会这样做。我会根据上面的评论添加一个后续问题。有什么方法可以加快您的解决方案吗?我有一个大的数据集,虽然它在我的样本数据上运行3微秒,但使用大数据集需要一段时间。谢谢你能提供的任何帮助。一个好的开始。我现在需要做的就是能够使用结果列表中1的索引(索引=2)来告诉原始列表需要从所有子列表中删除“cde”(索引位置2),因此结果是r=[['abc','def'],['bcd'],['abc','def','bcd']]。如果结果值大于100,我也会这样做。我会根据上面的评论添加一个后续问题。有什么方法可以加快您的解决方案吗?我有一个大的数据集,虽然它在我的样本数据上运行3微秒,但使用大数据集需要一段时间。谢谢你能提供的帮助。