Python 就地排序并行数组?

标签 python algorithm sorting

在 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/

相关文章:

Python 生成的 RSS : outputting raw HTML?

python - 没有名为常量的模块

regex - flex如何匹配行 anchor 的开头?

python - 平衡两个列表,直到它们的总和相等,并且在 Python 中的两个列表中交换最小

c++ - 在 C++ 中使用自己的模板比较函数对数组进行排序

sorting - 在 Notepad++ 中的某个字符后对行进行排序

python - pySerial 属性错误 : module 'serial' has no attribute 'Serial'

python - 使用 'loc' 选择多列

python - 在 Python 中逼近一个未知值

algorithm - 在快速排序中,如果一个数组是随机的,使用 3 的中位数来选择主元是否重要?