繁体   English   中英

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

[英]Most efficient computational way in python find pairs in a list of pairs

我需要查找对是否存在于对列表中。 我可以使用带有 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")

还有其他建议吗?

pair是两个整数的列表

alist具有元组元素。

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

尝试

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

如果您的问题要求不允许您更改原始值,则将类型转换为内联:

if tuple(pair) in list:

如果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

您还可以 go 将alist转换为设置。 那么查找时的平均复杂度应该是 O(1)

暂无
暂无

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

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