【发布时间】:2022-01-24 02:22:01
【问题描述】:
list_1 = [2, 7, 4, 5, 6, 1, 3, 8, 9]
list_2 = [(1, 5), (2, 0), (3, 6), (4, 4), (5, 3), (6, 2), (7, 1), (8, 7), (9, 8)]
我想重新排序列表list_2,使得每个元组的第一个元素遵循list_1指定的顺序,所以:
list_2_ordered = [(2, 0), (7, 1), (4, 4), (5, 3), (6, 2), (1, 5), (3, 6), (8, 7), (9, 8)]
我尝试使用map 函数将filter 映射到list_1 上作为可迭代对象(一般想法map(filter(lambda x,j : x[0]==j, list_2),list_1)。但它当然不起作用(我认为是由于类型错误)。如何我可以用最少的代码行吗?
【问题讨论】:
-
"我想重新排序" 好的,所以你想要内置的
sorted。 “遵循指定的顺序” 好的,所以您使用key参数来表示sorted。 ` by list 1 so` 即,通过它在列表 1 中的 位置,由该列表上的.index方法给出。阅读文档,解决方案就退出了。 “我尝试使用 map 函数将 list_1 上的过滤器映射为可迭代对象”这没有任何意义。filter用于删除东西,而不是重新排序;它已经处理了整个序列。map用于将单元素函数应用于序列。 -
这能回答你的问题吗? Rearranging list based on order of another list。唯一的区别是您需要获取第一个元组元素:
key=lambda t: <function>(t[0]) -
[list_2[i-1] for i in list_1]???