[英]Fastest way to get pairs from a list ordered by their distance in the list
給定range(n)
從列表中獲得各自距離的最快方式是從列表中各自的距離排序,即對於列表A
和B
的兩個元素,距離是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.