对列表排序返回原始序列

2024-04-19 16:49:44 发布

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

我正在尝试根据第二个列表的顺序对列表进行排序。我目前的方法如下:

letters = ["m", "h", "a"]
order = ["h", "a", "m"]
sorted(letters, key=lambda letters: order.index(letters[0]))
print(letters)

它没有将letters排序为与order(第二个列表)相同,而是保持letters不变。任何帮助都将不胜感激谢谢!你知道吗


Tags: 方法lambdakey列表index排序顺序order
3条回答

除了@RoadRunner的答案,不需要手动调用index,也不需要慢lambda,自动完成!!!你知道吗

你也应该这样做:

sorted(letters, key=order.index)

在@Shayn的答案中添加同样的内容,请执行以下操作:

letters.sort(key=order.index)

要按order的标记正确排序,需要执行以下操作:

sorted(letters, key=lambda letters: order.index(letters))

在本例中使用letters[0]也可以,因为字符串的长度仅为1,但在可以调用letters本身时不需要。你知道吗

但是,由于调用index()O(N),更好的方法是将索引存储在一个重新排序的字典映射中:

sort_map = {e: i for i, e in enumerate(order)}
sorted(letters, key=lambda x: sort_map[x])

它确保顺序查找是O(1)。你知道吗

letters = ["m", "h", "a"]
order = ["h", "a", "m"]
letters = [x for x in order if x in letters]
print(letters)

相关问题 更多 >