在模板列表之后排序python列表

在模板列表之后排序python列表,python,python-3.x,list,sorting,Python,Python 3.x,List,Sorting,从Python开始,我喜欢:) 但我有一个小问题 我有两份清单: 列表a=['XL','L','0S','1L','1S','2S','M','58','52','XXL'] list_b=['S','M','L','XL','0S','1S','2S','3S'] 我想在模板列表“列表b”之后排序“列表a” 如果它不存在于“列表b”中,我想在最后添加它 我想要的结果是: ['M'、'L'、'XL'、'0S'、'1S'、'2S'、“其余未排序的部分在此”] Andreas H将第二个列表转换为一

从Python开始,我喜欢:)

但我有一个小问题

我有两份清单:

列表a=['XL','L','0S','1L','1S','2S','M','58','52','XXL']

list_b=['S','M','L','XL','0S','1S','2S','3S']

我想在模板列表“列表b”之后排序“列表a”

如果它不存在于“列表b”中,我想在最后添加它

我想要的结果是:

['M'、'L'、'XL'、'0S'、'1S'、'2S'、“其余未排序的部分在此”]


Andreas H

将第二个列表转换为一个字典,该字典将字符串映射到其索引,然后使用排序后的
作为
键:

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)
。。。else maxsize
部分是键不在dict中的情况下的备用项。
maxsize
是一个非常大的依赖于系统的整数值,应该大于任何列表的大小

输出:

['M', 'L', 'XL', '0S', '1S', '2S', '1L', '58', '52', 'XXL']
详细说明:

  • 范围(len(list_b))
    生成项目的索引
    [0,1,2,3,…]
  • zip
    创建带有项目和索引的配对列表:
    [('S',0),('M',1),…]
  • dict
    转换为dictionary,这样您现在可以快速找到
    M
    的索引是
    1
  • lambda
    是一个函数,它接受一个字符串,将其传递到dict,如果没有找到索引,则返回
    maxsize
  • 按此键排序将显示结果列表

将列表转换为字典是必要的,以确保查找需要(摊销)恒定的时间,而不是每次线性地重新扫描列表。

我认为通常最好使用问题中使用的主要语言附加标签。python-3.x
是一个很好的工具,但是太具体了。要获得一些流量,请使用
python
@AndreyTyukin Yes courses标记,第一次在这里,我会记住这一点:-)
sorted(list_a, key=lambda x: list_b.index(x) if x in list_b else len(list_b))