Python排序并行数组到位?

dsi*_*cha 6 python sorting algorithm

是否有一个简单的(意思是没有滚动自己的排序函数)的方式来排序并行列表而不需要在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]
Run Code Online (Sandbox Code Playgroud)

我已经看过使用这些示例,zip但如果可以轻松避免将所有数据从并行列表复制到元组列表并再次返回,这似乎很愚蠢.

Nic*_*son 6

这是一个简单的方法:

perm = sorted(xrange(len(foo)), key=lambda x:foo[x])
Run Code Online (Sandbox Code Playgroud)

这会生成一个排列列表 - perm [i]中的值是foo中第i个最小值的索引.然后,您可以按顺序访问这两个列表:

for p in perm:
  print "%s: %s" % (foo[p], bar[p])
Run Code Online (Sandbox Code Playgroud)

你需要对它进行基准测试,以确定它是否更有效 - 但我怀疑它是否有很大的不同.


bay*_*yer 0

为了实现这一点,您必须实现自己的排序。

然而:不必要的复制真的会损害您的应用程序吗?通常,Python 的某些部分也让我觉得效率低下,但它们对于我的需要来说已经足够高效了。