簡體   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