擅长:python、mysql、java
<p>我已经使用senderle给出的答案很久了,直到我发现<code>np.argsort</code>。
下面是它的工作原理</p>
<pre><code># idx works on np.array and not lists.
list1 = np.array([3,2,4,1])
list2 = np.array(["three","two","four","one"])
idx = np.argsort(list1)
list1 = np.array(list1)[idx]
list2 = np.array(list2)[idx]
</code></pre>
<p>我觉得这个解决方案更直观,而且效果非常好。表演:</p>
<pre><code>def sorting(l1, l2):
# l1 and l2 has to be numpy arrays
idx = np.argsort(l1)
return l1[idx], l2[idx]
# list1 and list2 are np.arrays here...
%timeit sorting(list1, list2)
100000 loops, best of 3: 3.53 us per loop
# This works best when the lists are NOT np.array
%timeit zip(*sorted(zip(list1, list2)))
100000 loops, best of 3: 2.41 us per loop
# 0.01us better for np.array (I think this is negligible)
%timeit tups = zip(list1, list2); tups.sort(); zip(*tups)
100000 loops, best for 3 loops: 1.96 us per loop
</code></pre>
<p>尽管<code>np.argsort</code>不是最快的,但我发现它更容易使用</p>