我需要查找在配对列表中是否存在配对。我可以在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")
还有其他建议吗?
答案 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)