每当您想到“n largest”时,就想到heapq。
>>> import heapq
>>> import random
>>> l1 = [random.randrange(100) for _ in range(100)]
>>> l2 = [random.randrange(100) for _ in range(100)]
>>> heapq.nlargest(10, (((a - b), a, b) for a, b in zip(l1, l2)))
[(78, 99, 21), (75, 86, 11), (69, 90, 21), (69, 70, 1), (60, 86, 26), (55, 95, 40), (52, 56, 4), (48, 98, 50), (46, 80, 34), (44, 81, 37)]
这将在 O(n log x) 时间内找到 x 个最大的项目,其中 n 是列表中的项目总数;排序在 O(n log n) 时间内完成。
我突然想到,上述内容实际上并没有满足您的要求。你想要一个索引!还是很容易的。如果你想要差的绝对值,我也会在这里使用abs:
>>> heapq.nlargest(10, xrange(len(l1)), key=lambda i: abs(l1[i] - l2[i]))
[91, 3, 14, 27, 46, 67, 59, 39, 65, 36]