Python 两个字符串列表的交集

Python 两个字符串列表的交集,python,string,algorithm,data-structures,set,Python,String,Algorithm,Data Structures,Set,我有一个采访问题,内容大致如下: 给定两个无序客户列表,返回两个列表相交的列表。也就是说,返回出现在两个列表中的客户列表 我确定了一些事情: 假设每个客户都有一个唯一的名称 如果两个列表中的名称相同,则为同一客户 姓名的形式为“名”“姓” 没有II、Jr、怪异角色等的诡计 我认为关键是找到一种高效的算法/使用数据结构,以尽可能高效地完成这项工作 我的进步是这样的: 在内存中读取一个列表,然后一次读取另一个列表中的一项,以查看是否存在匹配项 按字母顺序排列两个列表,然后从一个列表的顶部开始,

我有一个采访问题,内容大致如下:

给定两个无序客户列表,返回两个列表相交的列表。也就是说,返回出现在两个列表中的客户列表

我确定了一些事情:

  • 假设每个客户都有一个唯一的名称
  • 如果两个列表中的名称相同,则为同一客户
  • 姓名的形式为“名”“姓”
  • 没有II、Jr、怪异角色等的诡计
我认为关键是找到一种高效的算法/使用数据结构,以尽可能高效地完成这项工作

我的进步是这样的:

  • 在内存中读取一个列表,然后一次读取另一个列表中的一项,以查看是否存在匹配项
  • 按字母顺序排列两个列表,然后从一个列表的顶部开始,查看每个项目是否出现在另一个列表中
  • 将两个列表放入有序列表中,然后使用较短的列表逐项检查(这样,如果一个列表有两个项目,则只检查这两个项目)
  • 将一个列表放入散列,并检查另一个列表中是否存在密钥
面试官不停地问:“下一步怎么办?”,所以我想我错过了别的东西

还有其他有效的方法吗

旁注,这个问题是在python中提出的,我刚刚读到了关于
集的内容,它们似乎尽可能高效地完成了这项工作。你知道
集合的数据结构/算法是什么吗

  • 将一个列表放入列表中,并使用该列表筛选第二个列表
  • 将过滤后的第二个列表放入bloom过滤器,并使用该过滤器过滤第一个列表
  • 对两个列表进行排序,并通过上述方法之一找到交点
  • 这种方法的好处(除了允许您在面试中正确使用半模糊的数据结构外)是,在您(很有可能)减小问题大小之前,它不需要任何O(n)存储


    面试官不停地问:“下一步怎么办?”,所以我想我错过了别的东西

    也许他们会一直这样问,直到你没有答案为止



    是bloom过滤器的python实现。

    它的实现方式其实并不重要。。。但是我相信它是用C实现的,所以它更快更好
    集([1,2,3,4,5,6])。交叉点([1,2,5,9])
    很可能是他们想要的

    在python中,可读性非常重要!python中的set操作被广泛使用,并且经过了很好的检验

    也就是说,另一种蟒蛇式的方法是

    list_new = [itm for itm in listA if itm in listB]
    


    基本上我相信他们是在测试你是否熟悉python,而不是你是否能够实现算法。既然他们问了一个非常适合python的问题

    你知道
    [itm for itm in listA if itm in listB]
    在幕后做了什么吗?我不知道你可以用python创建这样的列表?我本想在
    for
    循环中将
    附加到列表中,但这要干净得多。这是一种列表理解,是python优化的目标之一。它从ListA中的项目创建一个新列表,但前提是它们存在于listB中。但再一次,如果您熟悉python构造函数,他们不会测试您是否能够提出他们正在测试的算法。我的极客们只是对那里发生的事情很感兴趣。散列将对你的问题有很大帮助,可以提供O(n)中的解决方案。
    
    list_new = filter(lambda itm:itm in listB,listA)