比较数组的最快方法
Fastest way to compare arrays
从这个 扩展,我需要尽可能快的 解决方案:
鉴于以下情况:
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]
...或 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]]
提前致谢!
这是获取计数的一行:
print [sum([1 for _r in r if _m in _r]) for _m in m]
它给出了相同的结果,你写了:
[2, 2, 1, 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]
...或 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]]
提前致谢!
这是获取计数的一行:
print [sum([1 for _r in r if _m in _r]) for _m in m]
它给出了相同的结果,你写了:
[2, 2, 1, 2]