我只是在寻找计算两个列表中的差异的方法时阅读了另一个用户问题.
我的问题是我为什么要这样做
def diff(a,b):
b = set(b)
return [aa for aa in a if aa not in b]
Run Code Online (Sandbox Code Playgroud)
而不是做
def diff(a,b):
tmp = []
for i in a:
if(i not in b):
tmp.append(i)
return tmp
Run Code Online (Sandbox Code Playgroud)
编辑:刚注意到第二个diff函数实际上返回了相似之处.现在应该是正确的.
两个选项之间的主要区别在于使用的选项set
渐近更有效.
在合理有利的条件下,可以及时查看集合中的项目O(1)
; 查找列表中的项目需要O(n)
时间.
第二个不太重要的区别是,一个版本使用列表解析而另一个版本使用for
循环.列表推导倾向于产生更紧凑的代码.它们也往往更有效(尽管如果性能是一个问题,获得准确图片的唯一方法是运行基准测试).