我看到它用于排序,但是这行代码的各个组件实际上是什么意思?
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])
我看到它用于排序,但是这行代码的各个组件实际上是什么意思?
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])
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。
lambda
表示匿名函数。在这种情况下,此函数接受单个参数x
并返回x[1]
(即在索引 1 处的项目x
)。
现在,根据应用于列表每个元素的 as的值进行sort(mylist, key=lambda x: x[1])
排序。同样,返回相对于每个元素返回的任何值的最大值。mylist
key
max(gs_clf.grid_scores_, key=lambda x: x[1])
gs_clf.grid_scores_
key
我还应该指出,这个特定的功能已经包含在其中一个库中:operator
. 具体来说,operator.itemgetter(1)
相当于您的key
.
从 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()
示例中的 仅用于从排序函数的结果中获取最大值。
我希望这篇文章有帮助。
另一个使用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)]
distances.sort(key=lambda x: x[1])
这就是功能。这里 x 是列表,我们在其中将x[1]
列表的第二个元素添加到排序函数中。因此,基本上我们将每个列表的第二个元素(即 x[1])添加到排序函数中。我希望你明白这一点。
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)]
来自官方文档