python - 在 Python 中查找两个列表之间公共项的最快方法
问题描述
我正在寻找在 Python 中的两个列表之间找到共同项目的最快方法。这些列表具有相同的长度,包含整数(至少 10k)并且是无序的。经过一段时间的搜索,我找到了这个解决方案:
def common_item(l1, l2):
s = None
l2 = set(l2)
for i in l1:
if i in l2:
s = i
break
return s
我的目标(如果可能的话)是改进代码。欢迎任何建议。
编辑:我忘了提到最多有一个共同点。
解决方案
这是非常低效的,它只获取两个列表中的第一个公共项,而不是全部,更好的紧凑解决方案是使用集合。像这样,
def common_item(l1, l2):
return list(set(l1).intersection(set(l2)))
或者
def common_item(l1, l2):
return list(set(l1) & set(l2))
假设所有元素都是唯一的,它应该返回两个列表中共有的所有元素的列表。
如果列表中有重复的元素,那么您可以尝试这种方法,如果遇到它,它会从列表中删除该元素,但会以运行时为代价,当它很小时,这是微不足道的。
def common_item(l1, l2):
res = []
for x in l1:
if x in l2:
res.append(x)
l2.remove(x)
return res
推荐阅读
- html - 用不同的链接颜色覆盖 CSS
- eclipse - 驱动器映射更改后的 Maven Eclipse 错误
- ros - roslibjs - 使用自定义消息订阅主题
- swift - Swift 4 中的全屏 UIImage
- c# - 模型绑定 Asp.Net Core 与用户名
- python - 从数据框中删除内容可能是字符串选择的行
- java - 无法为事务打开 JPA EntityManager(使用 LocalContainerEntityManagerFactoryBean)
- excel - 具有可变固定单元格的 R1C1 公式格式
- java - 使用 apache poi 从 pptx 获取幻灯片 id
- javascript - 如何将开槽输入字段的表单属性设置为 shadow dom 内的表单?