【问题标题】:How do I sort a list of tuples by both elements?如何按两个元素对元组列表进行排序?
【发布时间】:2023-04-05 00:51:01
【问题描述】:

我有一个元组列表,例如[(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)] 不起作用,因为它是按第一个元素而不是第二个元素排序的”好吧,如果这是输入,您希望代码做什么
  • 仔细观察,您似乎想要选择具有所需属性的输入的子集。考虑一下:如果有多个有效子集,你会怎么做?如果没有有效的子集,你会怎么做?另外,请以反映实际问题的方式命名您的问题。

标签: python sorting


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-08-02
    • 2012-03-08
    • 1970-01-01
    • 2018-09-20
    • 2012-03-13
    • 2012-03-11
    • 2021-07-25
    • 2016-03-04
    相关资源
    最近更新 更多