簡體   English   中英

從列表中的距離排序的列表中獲取對的最快方法

[英]Fastest way to get pairs from a list ordered by their distance in the list

給定range(n)從列表中獲得各自距離的最快方式是從列表中各自的距離排序,即對於列表AB的兩個元素,距離是abs(AB) 這是我提出的實現:

 sorted(combinations(range(n), 2), key=lambda a: -abs(a[0]-a[1]))

但我希望它是一個發電機,效率更高。

如果你想要一個發電機:

def distant_pairs(n):
    for d in range(n, 0, -1):
        for i in range(n-d):
            yield (i, i+d)

或者散文:對於每個可能的距離,從最大到最小,找到距離相隔的每一對並產生它。

這是一個小測試工具,以顯示它的工作原理:

for n in range(12):
    answer = list(distant_pairs(n))
    prev_answer = sorted(combinations(range(n), 2), key=lambda a: -abs(a[0]-a[1]))

    print "SIZE", n
    print answer
    print prev_answer
    assert answer == prev_answer
    print "---"
print "done"

距離上的外環可以工作:

((a, a + d) for d in range(1, n) for a in range(n - d))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM