【发布时间】: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