繁体   English   中英

python:在列表中查找匹配的元组

[英]python: Find matching tuples in the list

在另一个2元组列表中找到匹配的2元组的最快方法是什么?

以下代码效率极低。 loc1和loc2是(x,y)坐标的元组列表。

loc3=[]
for loc in loc1:
    if loc in loc2:
        loc3.append(loc)

我认为哈希是关键但不确定如何在Python上做到这一点。 请教我一个优雅的代码。 谢谢。

你可以使用集合和intersection

loc3 = set(loc1).intersection(loc2)

这将为您提供一个无序的set ,并且不包含重复项(并强制项目可以清除)。 如果这是一个问题,请参阅Phil Frost的另一个答案。 但是,在不需要订单和重复的情况下,这应该更加有效。

订单保留解决方案可以包含重复项,但需要项目的loc2 (在loc2 )如下:

sloc2 = set(loc2)
loc3 = [ item for item in loc1 if item in sloc2 ]  #still O(m)

在python中, set只是一个哈希表。 检查该组中是否包含项目是(大约)O(1)操作,因为通过散列找到项目的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM