这是什么意思:key = lambda x:x [1]?

Nyx*_*nyx 16 python python-2.7

我看到它用于排序,但这行代码的各个组件实际上意味着什么?

key=lambda x: x[1]
Run Code Online (Sandbox Code Playgroud)

什么lambda,什么x:,为什么[1]x[1]等...

例子

max(gs_clf.grid_scores_, key=lambda x: x[1])

sort(mylist, key=lambda x: x[1])
Run Code Online (Sandbox Code Playgroud)

cdh*_*wie 19

lambda有效地创建内联函数.例如,您可以重写此示例:

max(gs_clf.grid_scores_, key=lambda x: x[1])
Run Code Online (Sandbox Code Playgroud)

使用命名函数:

def element_1(x):
    return x[1]

max(gs_clf.grid_scores_, key=element_1)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,max()将返回该第二个元素(x[1])大于所有其他元素的第二个元素的数组中的元素.另一种表达方式是函数调用暗示:返回max元素,使用x[1]作为.


ars*_*jii 13

lambda表示匿名函数.在这种情况下,此函数接受单个参数x并返回x[1](即索引1中的项x).

现在,根据应用于列表中每个元素的值进行sort(mylist, key=lambda x: x[1])排序.类似地,返回相对于每个元素返回的任何值的最大值.mylistkeymax(gs_clf.grid_scores_, key=lambda x: x[1])gs_clf.grid_scores_key

我还应该指出,这个特定的功能已经包含在其中一个库中:operator.具体来说,operator.itemgetter(1)相当于你的key.


fil*_*r36 7

使用sorted()函数和 key=lambda 的另一个例子。假设您有一个元组列表。在每个元组中,您都有汽车的品牌、型号和重量,并且您希望按品牌、型号或重量对这个元组列表进行排序。你可以用 lambda 来做到这一点。

cars = [('citroen', 'xsara', 1100), ('lincoln', 'navigator', 2000), ('bmw', 'x5', 1700)]

print(sorted(cars, key=lambda car: car[0]))
print(sorted(cars, key=lambda car: car[1]))
print(sorted(cars, key=lambda car: car[2]))
Run Code Online (Sandbox Code Playgroud)

结果:

[('bmw', 'x5', 1700), ('citroen', 'xsara', 1100), ('lincoln', 'navigator', 2000)]
[('lincoln', 'navigator', 2000), ('bmw', 'x5', 1700), ('citroen', 'xsara', 1100)]
[('citroen', 'xsara', 1100), ('bmw', 'x5', 1700), ('lincoln', 'navigator', 2000)]
Run Code Online (Sandbox Code Playgroud)


小智 5

distances.sort(key=lambda x: x[1])
Run Code Online (Sandbox Code Playgroud)

这就是功能。这里 x 是列表,我们将x[1]列表的第二个元素添加到排序函数中。所以,基本上我们将每个列表的第二个元素(即 x[1])添加到排序函数中。我希望你明白这一点。


小智 5

从用于Python 3.7(基准https://docs.python.org/3/howto/sorting.html),关键是的参数list.sort()sorted()。第一个内置函数在原位修改列表,而后者接受并返回可迭代。

键参数可以定义为在比较和排序之前分别在list / iterable的每个元素上调用的函数。在这种情况下,内联函数lambda x: x[1]定义为键参数的值。lambda函数接受输入x返回x [1],它是x的第二个元素。

应该

mylist = [[7, 8], [1, 2, 3], [2, 5, 6]]
# list(map(lambda x: x[1], mylist)) returns [8, 2 ,5]

mylistSort = sorted(mylist, key = lambda x: x[1])
# will sort the nested list based on the result of the lambda function 
Run Code Online (Sandbox Code Playgroud)

你能猜出什么结果吗?那么mylistSort是[8,2,5]的排序序列[2,5,8]的[[1,2,3],[2,5,6],[7,8]]。

max()在您的示例应用到刚刚得到的排序功能的结果的最大值。

希望这篇文章对您有所帮助。