排序Python列表之后模板列表

2024-06-16 08:26:28 发布

您现在位置:Python中文网/ 问答频道 /正文

从Python开始,我喜欢:)

但我有个小问题。你知道吗

我有两个清单:

list_a = ['XL', 'L', '0S', '1L', '1S', '2S', 'M', '58', '52', 'XXL']

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

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

如果它不存在于“列表b”中,我想把它添加到最后。你知道吗

我想要的结果是:

['M', 'L', 'XL', '0S' ,'1S', '2S', "The rest unsorted here" ]

安德烈亚斯H


Tags: the模板rest列表here排序listunsorted
2条回答
sorted(list_a, key=lambda x: list_b.index(x) if x in list_b else len(list_b))

将第二个列表转换为将字符串映射到其索引的字典,然后将sorted与此dict一起使用key

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']

详细说明:

  • range(len(list_b))生成项的索引[0, 1, 2, 3, ...]
  • zip创建具有项和索引的对的列表:[('S', 0), ('M', 1), ...]
  • dict转换为dictionary,因此您现在可以快速找到M的索引是1
  • lambda是一个函数,它接受一个字符串,将其传递给dict,如果找不到索引,则返回maxsize
  • 按此键排序将显示结果列表。你知道吗

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

相关问题 更多 >