如何按两个元素对元组列表进行排序?

Posted

技术标签:

【中文标题】如何按两个元素对元组列表进行排序?【英文标题】:How do I sort a list of tuples by both elements? 【发布时间】:2022-01-21 08:45:09 【问题描述】:

我有一个元组列表,例如[(1800, 3), (4000, 5), (1999, 4), (2000, 1), (2001, 2)]。我需要使用这些元组的任意组合的集合长度列表(例如,3),其中两个元素都按升序排序,例如[(2000, 1), (2001, 2), (4000, 5)]。所以[(1800, 3), (1999, 4), (2000, 1)] 不起作用,因为它是按第一个元素而不是第二个元素排序的。是否可以按照我需要的方式对列表进行排序?

【问题讨论】:

那是不可能的,就像在概念上你怎么能同时按两件事对某件事进行排序 @Hippolippo 是的,这很公平,谢谢 @Sable 检查this我的朋友 欢迎来到 Stack Overflow。 “所以[(1800, 3), (1999, 4), (2000, 1)] 不起作用,因为它是按第一个元素而不是第二个元素排序的”好吧,如果这是输入,您希望代码做什么 仔细观察,您似乎想要选择具有所需属性的输入的子集。考虑一下:如果有多个有效子集,你会怎么做?如果没有有效的子集,你会怎么做?另外,请以反映实际问题的方式命名您的问题。 【参考方案1】:

这不是一个真正的排序问题;这是一种搜索问题,因为您正在搜索满足某些条件的元素子集。

您可以通过以下方式解决。正常排序列表,即按第一个组件(使用第二个组件作为平局);那么您正在寻找第二个组件中增加的子序列。您可以使用标准算法找到longest increasing subsequence。如果这个子序列不够长,那么就没有解决办法(所以返回None或者报错);如果它比需要的长,那么只需将其切成合适的大小。

【讨论】:

以上是关于如何按两个元素对元组列表进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据另一个列表中元组元素的顺序对元组列表进行排序?

按第二个值对元组列表进行排序,reverse=True,然后按 key,reverse=False

如何按 Int 值对元组数组进行排序?

根据元组的值,以不同的顺序对元组列表进行排序。

如何根据另一个列表对元组列表进行排序

按第二项(整数值)对元组列表进行排序[重复]