0

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

鉴于以下情况:

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]

...或 m 中元素在 r 中的列表中的频率计数。然后,根据数字,如果值符合特定标准,我可以根据输出的索引编辑 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]]

提前致谢!

4

1 回答 1

2

这是获取计数的行:

print [sum([1 for _r in r if _m in _r]) for _m in m]

它给出了相同的结果,你已经写了:

[2, 2, 1, 2]
于 2016-11-17T23:54:29.377 回答