2024-04-19 16:49:44 发布
网友
我正在尝试根据第二个列表的顺序对列表进行排序。我目前的方法如下:
letters = ["m", "h", "a"] order = ["h", "a", "m"] sorted(letters, key=lambda letters: order.index(letters[0])) print(letters)
它没有将letters排序为与order(第二个列表)相同,而是保持letters不变。任何帮助都将不胜感激谢谢!你知道吗
letters
order
除了@RoadRunner的答案,不需要手动调用index,也不需要慢lambda,自动完成!!!你知道吗
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本身时不需要。你知道吗
letters[0]
但是,由于调用index()是O(N),更好的方法是将索引存储在一个重新排序的字典映射中:
index()
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)
除了@RoadRunner的答案,不需要手动调用index,也不需要慢
lambda
,自动完成!!!你知道吗你也应该这样做:
在@Shayn的答案中添加同样的内容,请执行以下操作:
要按
order
的标记正确排序,需要执行以下操作:在本例中使用
letters[0]
也可以,因为字符串的长度仅为1,但在可以调用letters
本身时不需要。你知道吗但是,由于调用
index()
是O(N),更好的方法是将索引存储在一个重新排序的字典映射中:它确保顺序查找是O(1)。你知道吗
相关问题 更多 >
编程相关推荐