我有一个list1,数据如下:["a","b","c","e"]
一个list2,数据如下["b","c","f"]
我的目标是最快效率的找出list2中有,但是list1中没有的数据,简单来说,就是数据过滤吧...
但是怎么做效率最高??
我用for,感觉效率很低:
for i in list2:
if i not in list1:
print (i)
当然也可以用列表解析~~,但是感觉效率都是非常低!有没有一种高效的方式呢?
我有一个list1,数据如下:["a","b","c","e"]
一个list2,数据如下["b","c","f"]
我的目标是最快效率的找出list2中有,但是list1中没有的数据,简单来说,就是数据过滤吧...
但是怎么做效率最高??
我用for,感觉效率很低:
for i in list2:
if i not in list1:
print (i)
当然也可以用列表解析~~,但是感觉效率都是非常低!有没有一种高效的方式呢?
1楼,先转换为set的方法,会改变数据的顺序,而且还会去重:
>>> l1 = ["a","b","c","e"]
>>> l2 = ["b","c","f","d","f"]
>>> list(set(l2) - set(l1))
['d', 'f']
2楼,列表解析的方法,会保持数据顺序,也不会去重:
>>> l1 = ["a","b","c","e"]
>>> l2 = ["b","c","f","d","f"]
>>> result = [i for i in l2 if i not in l1]
>>> result
['f', 'd', 'f']
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
假如希望代码看起来简单,那么就很方便实现:
如果希望提高效率,那么假设这时候list1 是个非常长的list;由于需要遍历list2,这部分时间是不可避免的,那么问题就转变为怎么在list1中寻找元素让时间消耗最短。我做了下面的例子:
结果输出时间,不出意外,第二个好快些。因为采用了dict的方式,也就是hash的路由匹配方式,内部实现机制估计是二叉树,比遍历list1来寻找快多了。
cost time: 4.26041412354 # method1
cost time: 0.0187389850616 # method2