在模板列表之后排序python列表
从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将第二个列表转换为一
列表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))