擅长:python、mysql、java
<p>想象一下,您有一个函数,它返回一个已排序的列表,例如,<a href="http://en.wikipedia.org/wiki/Quicksort" rel="nofollow">Quicksort algorithm</a>在Python中的实现:</p>
<pre><code>def qsorted(L):
return L and (qsorted([x for x in L[1:] if x < L[0]]) + # lesser items
[L[0]] + # pivot
qsorted([x for x in L[1:] if x >= L[0]])) # greater or equal
</code></pre>
<p>然后您可以使用它对您的<code>scorelist</code>进行排序:</p>
^{pr2}$
<p>要按照<code>scorelist</code>的顺序对<code>namelist</code>进行排序,可以使用<a href="http://en.wikipedia.org/wiki/Schwartzian_transform" rel="nofollow">Schwartzian transform</a>:</p>
<pre><code>qsorted_namelist = [name for score, name in qsorted(zip(scorelist, namelist))]
</code></pre>
<p>注意,<em>相同的</em>函数<code>qsorted()</code>在两种情况下都使用:对<code>scorelist</code>进行排序,并将两个列表一起排序。您应该尝试将公共功能提取到单独的函数中,而不是针对稍微不同的任务修改排序算法。在</p>
<p>要测试结果是否正确,可以使用内置的<code>sorted()</code>函数:</p>
<pre><code> sorted_namelist = [name for score, name in sorted(zip(scorelist, namelist))]
</code></pre>