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]
我已经看过使用这些示例,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])
你需要对它进行基准测试,以确定它是否更有效 - 但我怀疑它是否有很大的不同.