我看到它用于排序,但这行代码的各个组成部分究竟是什么意思?
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])
答案 0 :(得分:16)
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]
作为键返回max元素。
答案 1 :(得分:13)
lambda
表示anonymous function。在这种情况下,此函数采用单个参数x
并返回x[1]
(即x
中索引1处的项)。
现在,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
。
答案 2 :(得分:3)
x[1]
这是功能。 这里x是列表,我们在其中添加{{1}},即list的第二个元素到sort函数。所以,基本上我们将每个列表的第二个元素(即x [1])添加到sort函数中。 我希望你能理解这一点。
答案 3 :(得分:2)
根据Python 3.7(https://docs.python.org/3/howto/sorting.html)的参考,键为list.sort()
和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是[8,2,5]的排序序列[2,5,8]的[[1,2,3],[2,5,6],[7,8]]。
您的示例中的max()
仅用于从排序函数的结果中获取最大值。
我希望这篇文章对您有所帮助。
答案 4 :(得分:2)
使用key = lambda的 sorted()函数的另一个示例。让我们考虑一下您有一个元组列表。在每个元组中,您都有汽车的品牌,型号和重量,并且您想要按品牌,型号或重量对这个元组列表进行排序。您可以使用lambda来实现。
page_id content name
1 {cat, dog} John
1 NaN Anne
2 NaN Ethan
3 {sea, earth} John
3 {earth, green} Anne
3 NaN Ethan
4 NaN Mark
结果:
rails -v
...
Ignoring sqlite3-1.3.13 because its extensions are not built. Try: gem pristine sqlite3 --version 1.3.13
Ignoring websocket-driver-0.6.5 because its extensions are not built. Try: gem pristine websocket-driver --version 0.6.5
Ignoring websocket-native-1.0.0 because its extensions are not built. Try: gem pristine websocket-native --version 1.0.0
Could not find nokogiri-1.10.4 in any of the sources
Run `bundle install` to install missing gems.
答案 5 :(得分: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)]
摘自官方文档