擅长:python、mysql、java
<p>将第二个列表转换为将字符串映射到其索引的字典,然后将<code>sorted</code>与此dict一起使用<code>key</code>:</p>
<pre><code>from sys import maxsize
list_a = ['XL', 'L', '0S', '1L', '1S', '2S', 'M', '58', '52', 'XXL']
list_b = ['S', 'M', 'L', 'XL', '0S', '1S', '2S', '3S']
bDict = dict(zip(list_b, range(len(list_b))))
aSorted = sorted(list_a, key=lambda x: bDict[x] if x in bDict else maxsize)
print(aSorted)
</code></pre>
<p><code>... else maxsize</code>部分是键不在dict中的情况下的回退。<code>maxsize</code>是一个非常大的依赖于系统的整数值,应该大于任何列表的大小。你知道吗</p>
<p>输出:</p>
<pre><code>['M', 'L', 'XL', '0S', '1S', '2S', '1L', '58', '52', 'XXL']
</code></pre>
<p>详细说明:</p>
<ul>
<li><code>range(len(list_b))</code>生成项的索引<code>[0, 1, 2, 3, ...]</code></li>
<li><code>zip</code>创建具有项和索引的对的列表:<code>[('S', 0), ('M', 1), ...]</code></li>
<li><code>dict</code>转换为dictionary,因此您现在可以快速找到<code>M</code>的索引是<code>1</code></li>
<li><code>lambda</code>是一个函数,它接受一个字符串,将其传递给dict,如果找不到索引,则返回<code>maxsize</code></li>
<li>按此键排序将显示结果列表。你知道吗</li>
</ul>
<p>将列表转换为字典是必要的,以确保查找需要(分摊)固定时间,而不是每次线性地重新扫描列表。你知道吗</p>