【问题标题】:find element in list 1 that is in list 2 [duplicate]在列表2中查找列表1中的元素[重复]
【发布时间】:2015-05-23 02:40:18
【问题描述】:

我编写了以下代码来查找列表中的元素,这些元素也在另一个列表中。但是这个算法在 Big O 中是 n 平方的,有没有更好的方法来解决这个问题? 提前致谢

def printCommon(list1,list2):
    for i in list1:
        found = False
        for j in list2:
            if i == j:
                print i
                break
if __name__ == "__main__":
    list1 = [1,2,3,4,5]
    list2 = [9,8,7,6,5]
    printCommon(list1,list2)

【问题讨论】:

  • 取决于,intersection 在下面做类似的事情吗?

标签: python


【解决方案1】:

作为一种更有效的方式,您可以使用set.intersection

>>> set(list1).intersection(list2)
set([5])

一个基准:

from timeit import timeit

s1="""
def printCommon(list1,list2):
    for i in list1:
        found = False
        for j in list2:
            if i == j:
                #print i
                break

list1 = [1,2,3,4,5]
list2 = [9,8,7,6,5]
printCommon(list1,list2)
"""
s2="""
list1 = [1,2,3,4,5]
list2 = [9,8,7,6,5]
set(list1).intersection(set(list2))
    """

结果:

first:  0.129281997681
second :  0.0606861114502

【讨论】:

  • 但这在下面做了类似的事情吗?
  • @godzilla 正是你想要的!您的列表之间的交集!
  • 不,它使用散列做了一些非常不同的事情,使其大致为 O(2n)(注意@Kasra,没有必要将 list2 显式转换为 set 以使其工作)
  • @Kasra,因为他是正确的,使用 set.intersection 的整个想法是你不必调用 set,你正在增加开销。基准测试与 Iguananaut 想要表达的内容无关。
  • @PadraicCunningham 是的,我很抱歉我对setintersection 有误解(你还记得吗:))!!我阅读了维基,现在我更正了! ;)
猜你喜欢
  • 1970-01-01
  • 2015-08-08
  • 2021-01-01
  • 2014-01-08
  • 2014-04-21
  • 1970-01-01
  • 2010-10-10
  • 2018-11-11
  • 2016-01-11
相关资源
最近更新 更多