python - 从列表中按距离排序的列表中获取对的最快方法

标签 python algorithm sorting permutation

给定一个 range(n)从列表中的每个元素的各自距离排序的范围中获取对的最快方法是什么,即对于列表中的两个元素 AB距离是abs(A-B) . 这是我想出的实现:

 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"

关于python - 从列表中按距离排序的列表中获取对的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27249116/

相关文章:

python - 查找沿线的点密度以查找具有最大浓度的区域

sql - 如何从两个用户之间的连接表中检索一组连接的用户?

c - 如何在C中对一组结构进行排序

python - 如何使用python列出Kafka消费者组

python - 每次添加新的 Google Sheet 行时都会触发 AWS Lambda

python - Snakemake 删除 --config 值中的下划线?

regex - 查找最简单的正则表达式查询以匹配一组示例

algorithm - 使用位操作编程问题查找子序列

python - 从排序列表中获取大于给定数字的第一个元素

MySQL 如何对这个查询进行排序?