<p>将列表理解与<code>sorted</code>结合使用:</p>
<pre><code>sorted([t for t in tarifas if t[0] in list_countries],
key=lambda x: list_countries.index(x[0]))
</code></pre>
<p>输出:</p>
<pre><code>[['Angola', '3670.0', '0.931103978746121', '1.162652536895962'],
['Austria', '52470', '1.2396562976033307', '0.8630735107719588'],
['Argentina', '9050.0', '1.3647162509775996', '0.48274125735042017'],
['Albania', '5450.0', '1.1439867079655244', '0.9195410037811979'],
['Armenia', '4450.0', '1.4545784506262867', '1.430465487479917']]
</code></pre>
<p>一个不使用列表理解:</p>
<pre><code>tarifas_paises_escogidos = []
for t in tarifas:
# for v in list_countries: You don't need this
if t[0] in list_countries:
tarifas_paises_escogidos.append(t)
print(tarifas_paises_escogidos)
</code></pre>
<p>产生过滤但未排序的:</p>
<pre><code>[['Albania', '5450.0', '1.1439867079655244', '0.9195410037811979'],
['Angola', '3670.0', '0.931103978746121', '1.162652536895962'],
['Argentina', '9050.0', '1.3647162509775996', '0.48274125735042017'],
['Armenia', '4450.0', '1.4545784506262867', '1.430465487479917'],
['Austria', '52470', '1.2396562976033307', '0.8630735107719588']]
</code></pre>
<p>然后进行排序(并重新分配!)地址:</p>
<pre><code>tarifas_paises_escogidos = sorted(tarifas_paises_escogidos, key=lambda x: list_countries.index(x[0]))
</code></pre>
<p>这使得上述输出。你知道吗</p>
<p>洞察:</p>
<p>在上面的<code>lambda</code>中,<code>x</code>几乎毫无意义。它只意味着输入<code>lambda</code>得到的内容被定义为<code>x</code>,并用于索引(即<code>x[0]</code>)。你知道吗</p>
<p>等同于:</p>
<pre><code>def some_func(x):
return list_countries.index(x[0])
</code></pre>
<p>然后用在<code>sorted</code>:</p>
<pre><code>tarifas_paises_escogidos = sorted(tarifas_paises_escogidos, key=some_func)
</code></pre>
<p>但是你可能经常发现仅仅为一个用例定义一个函数是非常低效的。这时<code>lambda</code>就开始了:)。你知道吗</p>