python中最有效的计算方式是在成对列表中查找对

时间:2019-11-08 00:07:44

标签: python

我需要查找在配对列表中是否存在配对。我可以在if语句中使用标准的for循环,但是还有一种计算效率更高的方法吗?

当前我的数据如下:

alist = [(12970, 12980), (12970, 13000), (12970, 13012)]
pair = [12970, 13000]

for a in list:
   if a == pair:
       print("do something")

我尝试使用以下内容,但未返回匹配项:

if pair in alist:
    print("do something")

还有其他建议吗?

2 个答案:

答案 0 :(得分:1)

pair是两个整数的列表

alist的元素为元组

由于它们甚至不是相同的基本类型,因此它们的比较将不相等。

尝试

alist = [(12970, 12980), (12970, 13000), (12970, 13012)]
pair = (12970, 13000)    # tuple, not list
if pair in list:
    ...

如果您的问题要求不允许您更改原始值,请直接内嵌类型:

if tuple(pair) in list:

答案 1 :(得分:0)

如果对alist进行了排序,则可以使用复杂度为O(log n)的bisect

从模块文档复制:

import bisect

def index(a, x):
    'Locate the leftmost value exactly equal to x'
    i = bisect.bisect_left(a, x)
    if i != len(a) and a[i] == x:
        return i
    raise ValueError

index(alist, (12970, 13000))

如果未找到任何元素,您将获得ValueError

您还可以将alist转换为set。 那么平均平均查找复杂度应为O(1)