繁体   English   中英

比较数组的最快方法

[英]Fastest way to compare arrays

从这个问题出发,我需要最快的解决方案:

给定以下内容:

m=['abc','bcd','cde','def']
r=[['abc','def'],['bcd','cde'],['abc','def','bcd']]

我想编辑这些对象(或产生的新对象),以便对于列表m中的每个元素,如果它在r的所有列表中都存在少于2次,则将该元素从m以及其中发生的位置中删除。河

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

['abc','bcd','def']

...因为'cde'在r中仅被发现一次。

更好的是:

[2, 2, 1, 2]

...或r中列表中m中元素的频率计数。 然后,基于该数字,如果值满足特定条件,则可以基于输出的索引来编辑r中的列表。

因此,例如,如果i <2或> 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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM