如何按两个元素对元组列表进行排序?
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
或者报错);如果它比需要的长,那么只需将其切成合适的大小。
【讨论】:
以上是关于如何按两个元素对元组列表进行排序?的主要内容,如果未能解决你的问题,请参考以下文章