按另一个排序枚举列表重新排列元组列表

2024-06-23 20:10:08 发布

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

我有一个元组列表: a = [(10, 11), (5, 5), (2, 3), (6, 7), (8, 3), (9, 2)]和一个带有值的简单列表b = [10, 9, 10, 2, 8, 3]。然后我列举第二个列表,并出于某些目的对其进行排序

b_enumerated = list(enumerate(b))
# [(0, 10), (1, 9), (2, 10), (3, 2), (4, 8), (5, 3)]
b_sorted = sorted(b_enumerated, key=lambda x: x[1], reverse=True)
# [(0, 10), (2, 10), (1, 9), (4, 8), (5, 3), (3, 2)]

现在我想根据第二个排序列表重新排列我的第一个列表,因此我希望得到[(10, 11), (2, 3), (5, 5), (8, 3), (9, 2), (6, 7)](原始列表的元组按排序列表的索引顺序:0、2、1、4、5、3),其中,例如,我枚举的第一个列表是[(0, (10, 11)), (1, (5, 5)), (2, (2, 3)), (3, (6, 7)), (4, (8, 3)), (5, (9, 2))]

我怎样才能达到预期的结果?也许我需要使用某种索引,因为对压缩列表排序没有帮助

谢谢


Tags: lambdakey目的true列表排序顺序list
2条回答

快速回答

a_sorted =  [a[i[0]] for i in b_sorted]

简要说明

你基本上是想说‘发送a[0]a_sorted[0],发送a[1]a_sorted[2]。。。发送a[i]a_sorted[b_sorted[i][0]]

这可以通过代码来完成

a_sorted =  [a[b_sorted[i][0]] for i in range(len(b_sorted))]

它工作得很好,但是可以通过迭代b_sorted来缩短和整理

a_sorted =  [a[i[0]] for i in b_sorted]

如果目的是以b的相反顺序对a进行排序,那么首先不需要枚举b并对枚举序列进行排序来构建b_sorted的中间列表

相反,您可以使用a压缩b进行排序,然后只输出结果元组序列中的第二项:

[t for _, t in sorted(zip(b, a), reverse=True)]

这将返回:

[(10, 11), (2, 3), (5, 5), (8, 3), (9, 2), (6, 7)]

相关问题 更多 >

    热门问题