在 Python 中是否有一种简单的(即无需滚动自己的排序函数)无需不必要的复制 对并行列表进行排序的方法?例如:
foo = range(5)
bar = range(5, 0, -1)
parallelSort(bar, foo)
print foo # [4,3,2,1,0]
print bar # [1,2,3,4,5]
我看过使用 zip
的示例,但如果可以轻松避免,将所有数据从并行列表复制到元组列表然后再复制回来似乎很愚蠢。
最佳答案
这里有一个简单的方法:
perm = sorted(xrange(len(foo)), key=lambda x:foo[x])
这会生成一个排列列表 - perm[i] 中的值是 foo 中第 i 个最小值的索引。然后,您可以按顺序访问这两个列表:
for p in perm:
print "%s: %s" % (foo[p], bar[p])
不过,您需要对其进行基准测试以确定它是否更高效 - 我怀疑它是否会产生很大的不同。
关于Python 就地排序并行数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2222769/