Python:比较两个列表的更好方法?

Python:比较两个列表的更好方法?,python,Python,请不要给我负号。我想问一个更好的方法来解决这个问题,因为我现在所做的对我来说是一个巨大的负担 他是我的问题:我有两个清单。我想确保一个列表中的任何项目都不在另一个列表中 在Python中,我一直在使用以下代码行。。。(假设列表有3项。) 这些行实际上对我来说还可以,直到我突然意识到我必须处理长度大于200的列表。我有很多清单要比较 那么我怎样才能更改代码呢?非常感谢你的帮助 您可以将其中一个列表转换为集合,并使用: 请注意,两个列表中的元素都必须是。您可以将其中一个列表转换为集合,并使用: 请注

请不要给我负号。我想问一个更好的方法来解决这个问题,因为我现在所做的对我来说是一个巨大的负担

他是我的问题:我有两个清单。我想确保一个列表中的任何项目都不在另一个列表中

在Python中,我一直在使用以下代码行。。。(假设列表有3项。)

这些行实际上对我来说还可以,直到我突然意识到我必须处理长度大于200的列表。我有很多清单要比较


那么我怎样才能更改代码呢?非常感谢你的帮助

您可以将其中一个列表转换为
集合
,并使用:


请注意,两个列表中的元素都必须是。

您可以将其中一个列表转换为
集合
,并使用:

请注意,两个列表中的元素必须为。

对于非常大的列表

import timeit
import random

L=[random.randrange(2000000) for x in xrange(1000000)]
M=[random.randrange(2000000) for x in xrange(1000000)]

start_time = timeit.default_timer()
print any(x in M for x in L)
#True
print timeit.default_timer() - start_time
#0.00981207940825

start_time = timeit.default_timer()
print not set(L).isdisjoint(M)
#True
print timeit.default_timer() - start_time
#0.164795298542

start_time = timeit.default_timer()
print True if set(L) & set(M) else False
#True
print timeit.default_timer() - start_time
#0.436377859225

start_time = timeit.default_timer()
print True if set(L).intersection(M) else False
#True
print timeit.default_timer() - start_time
#0.368563831022
显然,

print any(x in M for x in L)
对于非常大的列表,效率要高得多

import timeit
import random

L=[random.randrange(2000000) for x in xrange(1000000)]
M=[random.randrange(2000000) for x in xrange(1000000)]

start_time = timeit.default_timer()
print any(x in M for x in L)
#True
print timeit.default_timer() - start_time
#0.00981207940825

start_time = timeit.default_timer()
print not set(L).isdisjoint(M)
#True
print timeit.default_timer() - start_time
#0.164795298542

start_time = timeit.default_timer()
print True if set(L) & set(M) else False
#True
print timeit.default_timer() - start_time
#0.436377859225

start_time = timeit.default_timer()
print True if set(L).intersection(M) else False
#True
print timeit.default_timer() - start_time
#0.368563831022
显然,

print any(x in M for x in L)

效率更高

无论您是否使用:

set(List_s).isdisjoint(List_big)
或:


但是要快得多。在我的计算机上,
isdisjoint
对测试数据运行大约需要150纳秒,而
intersection
对相同的数据运行大约需要95微秒——大约要慢630倍

无论您是否使用:

set(List_s).isdisjoint(List_big)
或:


但是要快得多。在我的计算机上,
isdisjoint
对测试数据运行大约需要150纳秒,而
intersection
对相同的数据运行大约需要95微秒——大约要慢630倍

any(列表中的x比列表中的x大)
这将是一个多项式时间。也许最好用
List\u big
做一个
集,这样就可以是线性时间。
any(List中的x\u big代表List中的x)
这将是一个多项式时间。最好是用
列表_big
创建一个
集合
,这样就可以是线性时间。如果元素可以散列,谢谢!那比我的好多了!如果元素是可散列的,谢谢!那比我的好多了!非常感谢你!非常感谢你!