30

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

key=lambda x: x[1]

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

例子

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

sort(mylist, key=lambda x: x[1])
4

6 回答 6

23

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

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

使用命名函数:

def element_1(x):
    return x[1]

max(gs_clf.grid_scores_, key=element_1)

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

于 2013-04-30T22:32:32.880 回答
16

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

现在,根据应用于列表每个元素的 as的值进行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.

于 2013-04-30T22:33:18.220 回答
13

从 Python 3.7 ( https://docs.python.org/3/howto/sorting.html ) 的参考资料中,键是list.sort()and的参数sorted()。第一个内置函数在适当位置修改列表,而后者接受并返回可迭代。

key 参数可以定义为在比较和排序之前分别在 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 

你能猜到结果是什么吗?mylistSort 然后是 [[1,2,3], [2,5,6], [7,8]] 来自 [8,2,5] 的排序序列,即 [2,5,8]。

您的max()示例中的 仅用于从排序函数的结果中获取最大值。

我希望这篇文章有帮助。

于 2018-11-01T11:06:38.873 回答
9

另一个使用key=lambda的sorted()函数示例。假设您有一个元组列表。在每个元组中,您都有汽车的品牌、型号和重量,并且您希望按品牌、型号或重量对这个元组列表进行排序。你可以用 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]))

结果:

[('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)]
于 2019-09-12T14:07:48.340 回答
5
distances.sort(key=lambda x: x[1])

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

于 2018-01-06T06:57:48.163 回答
0
student_tuples = [
    ('john', 'A', 15),
    ('jane', 'B', 12),
    ('dave', 'B', 10),]
sorted(student_tuples, key=lambda student: student[2])   # sort by age
>>>>[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

来自官方文档

于 2020-05-19T06:24:11.290 回答