Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中使用lambda进行排序_Python_Sorting_Functional Programming_Anonymous Function - Fatal编程技术网

如何在Python中使用lambda进行排序

如何在Python中使用lambda进行排序,python,sorting,functional-programming,anonymous-function,Python,Sorting,Functional Programming,Anonymous Function,在Python中,我尝试使用lambda按日期排序。我无法理解我的错误消息。信息是: <lambda>() takes exactly 1 argument (2 given) 使用 在Python2.x上,sorted函数按以下顺序获取其参数: sorted(iterable, cmp=None, key=None, reverse=False) 因此,如果没有键=,您传入的函数将被视为一个cmp函数,它有两个参数 lst = [('candy','30','100'), ('

在Python中,我尝试使用lambda按日期排序。我无法理解我的错误消息。信息是:

<lambda>() takes exactly 1 argument (2 given)
使用

在Python2.x上,
sorted
函数按以下顺序获取其参数:

sorted(iterable, cmp=None, key=None, reverse=False)
因此,如果没有
键=
,您传入的函数将被视为一个
cmp
函数,它有两个参数

lst = [('candy','30','100'), ('apple','10','200'), ('baby','20','300')]
lst.sort(key=lambda x:x[1])
print(lst)
它将打印如下:

[('apple', '10', '200'), ('baby', '20', '300'), ('candy', '30', '100')]

您正在尝试将键函数与lambda函数一起使用

Python和其他语言,如C#或F#使用

此外,当涉及到关键功能时,根据

和都有一个关键参数 在创建前,指定要在每个列表元素上调用的函数 比较

key参数的值应该是一个函数,它接受一个参数并返回一个用于排序的键。这种技术很快,因为每个输入记录只调用一次键函数

因此,键函数有一个参数键,它确实可以接收lambda函数

在这里有一个很好的例子。假设您有以下列表

ids = ['id1', 'id100', 'id2', 'id22', 'id3', 'id30']
并希望对其“整数”进行排序。然后,你会这样做

sorted_ids = sorted(ids, key=lambda x: int(x[2:])) # Integer sort
打印它会给

['id1', 'id2', 'id3', 'id22', 'id30', 'id100']
在您的特定情况下,您只需要在lambda之前编写
key=
。因此,您需要使用以下命令

a = sorted(a, key=lambda x: x.modified, reverse=True)

add keywoard argument key=lambda x:x.modified将解决此问题您有很好的机会学习欣赏通过此体验传递的关键字参数。这非常古老,但是,您是否知道错误代码具有误导性?您的答案听起来像是Python在为
lambda
提供另一个参数,因为
cmp
函数需要2?@SuperBiasedMan该错误没有误导性
cmp
,比较器函数接受两个参数。如果未指定传递的是
,则根据函数参数顺序假定传递的是比较器。您的lambda只接受一个参数,因此不是有效的比较器,这就是错误所在。Python2和Python3似乎有不同的函数声明。我使用Python3,因此不再有cmp。在Python2中,它是一个
iterable
,在Python3中它是什么?这不适用于字符串整数。看看这个!lst=[('999','9'),('303','30'),('343','34')]lst.sort(key=lambda x:x[1])print(lst)结果是[('303','30'),('343','34'),('999','9')],它不是根据每个列表中的第二个元素排序的。lst=[('candy','999','9'),('apple','303','30'),('baby','343','34')]lst,('baby'、'343'、'34')、('candy'、'999'、'9')。这也不是基于2个元素来排序的!@DanielKua这很容易修复。你可以只做
int(x[1])
而不只是
x[1]
['id1', 'id2', 'id3', 'id22', 'id30', 'id100']
a = sorted(a, key=lambda x: x.modified, reverse=True)