我已經做了一些測試:
test_lists.py
a = range(1, 1000)
b = range(2, 1002)
tmp = []
for i in a:
if(i not in b):
tmp.append(i)
test_set_list_comprehensions.py
a = range(1, 1000)
b = range(2, 1002)
b = set(b)
[aa for aa in a if aa not in b]
test_set.py
a = range(1, 1000)
b = range(2, 1002)
list(set(a).difference(set(b)))
而這正是timeit說:
~$ python -m timeit 'import test_lists'
1000000 loops, best of 3: 0.671 usec per loop
~$ python -m timeit 'import test_set_list_comprehension'
1000000 loops, best of 3: 0.766 usec per loop
~$ python -m timeit 'import test_set'
1000000 loops, best of 3: 0.656 usec per loop
所以最好的似乎是:
test_set.py
a = range(1, 1000)
b = range(2, 1002)
list(set(a).difference(set(b)))
爲什麼後者是O(n^2)的好解釋。另外,下面是列表理解vs循環方法的一些'timeit'時間表(列表解析速度大約是我的示例中的兩倍):https://gist.github.com/2647005 –
哇......這是一些打亂證據。我確實實施了第一個。 – Jake