【问题标题】:Sorting a list of tuples according to the first element [duplicate]根据第一个元素对元组列表进行排序[重复]
【发布时间】:2020-11-09 20:35:24
【问题描述】:

我必须根据第二个元素对元组列表进行排序。我正在使用函数 sort() 来做到这一点。但是,我所做的不起作用...

   def sort_tuple(to_sort):
        sort_tuple=((3, 'C'), (1, 'B'), (2, 'A'))
        sort_tuple.sort(key = lambda x: x[1])  
        return sort_tuple

如果我必须根据第一个元素对其进行排序,代码会是我在下面写的吗?:

   def sort_tuple(to_sort):
        sort_tuple=((3, 'C'), (1, 'B'), (2, 'A'))
        sort_tuple.sort
        return sort_tuple

谢谢!

【问题讨论】:

  • 您犯了一个相当基本的错误:您想对to_sort 进行排序,但您在函数内部创建了一个新元组并继续排序并返回它。另外,不要将临时返回值命名为与函数相同的名称,这会造成混淆并防止递归。最后一个问题是你的函数的前提:你不能对元组进行排序,它是不可变的,你可以创建一个新的元组,它是原始元组的排序版本。
  • 您需要自己编辑问题; cmets 没有用换行符格式化。
  • 你为什么要在函数内部创建一个新的tuple 而忽略参数?似乎您真的只是想要to_sort.sort(key=lambda x: x[1])return to_sort,或者避免改变调用者的参数(这是一个好主意,因为无论如何您都会返回排序值,并且在 Python 中,变异和返回变异值都令人困惑和皱眉,并允许非list 输入),更简单的return sorted(to_sort, key=lambda x: x[1])
  • 所以我应该写 to_sort 而不是 sort_tuple?但是当我这样做时,我也没有得到任何回报......
  • 这能回答你的问题吗? Sorting a tuple that contains tuples

标签: python sorting tuples


【解决方案1】:
def sort_tuple(to_sort):
   return tuple(sorted(to_sort, key = lambda x:x[1]))

sorted()返回排序后的对象,而不是排序(变异)它,所以这里会将to_sort转换成一个列表并排序

那么如果你想要一个元组,我们将列表 sorted(to_sort, key = lambda x:x[1]) 重新转换为一个带有 tuple() 的元组

【讨论】:

  • 现在可以工作了,但是将元组作为外部对象似乎违反直觉,它应该是一个列表,因为它是可变的
  • 最初的问题是第二个元素,所以它是 lambda x:x[1] 但是第一个元素是 lambda x:x[0]
  • 请考虑为您的代码添加一些解释
  • 完成,谢谢;这是我第一次回答堆栈溢出问题
猜你喜欢
  • 2012-03-11
  • 2011-05-21
  • 2012-03-13
  • 1970-01-01
  • 2021-09-15
  • 2017-12-29
  • 1970-01-01
  • 2016-03-17
  • 1970-01-01
相关资源
最近更新 更多