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

Python 这是什么意思:key=lambda x:x[1]?,python,python-2.7,Python,Python 2.7,我看到它用于排序,但这行代码的各个组件实际上意味着什么 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

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

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]
)大于所有其他元素第二个元素的元素。另一种措辞方式如函数调用所示:返回max元素,使用
x[1]
作为键。

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

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

我还应该指出,此特定函数已包含在其中一个库中:。具体来说,
操作符.itemgetter(1)
相当于您的

distances.sort(key=lambda x: x[1])
这就是函数。 这里x是列表,我们在其中添加了
x[1]
,即列表的第二个元素到排序函数中。因此,我们基本上是将每个列表的第二个元素(即x[1])添加到排序函数中。
我希望您能理解这一点。

从Python3.7()的参考中,关键是
list.sort()和
sorted()
的参数。第一个内置函数就地修改列表,而后者接受并返回iterable

关键参数可以定义为在比较和排序之前分别对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]的排序序列中的[1,2,3],[2,5,6],[7,8],[2,5,8]

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


我希望这篇文章能有所帮助。

还有一个使用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]))
结果:

[('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)]

来自官方文件

Ehi!这是我对大约1小时前提出的另一个问题的回答!:d x:x[1]的含义是什么?这意味着从x中选择第二项,即如果x=[1,2,3],那么x[1]=2。由于python使用零索引,x[0]=1,x[1]=2等等。x:x[1]?f(x)=x_1的含义是什么,其中x是数组,x_1是第一个元素,x在哪里被赋值?我的意思是,您根据lambda(内联函数)生成的列表中的键对“mylist”进行排序,但是,在传递到lambda之前,“x”的值分配在哪里?谢谢您的解释!这个答案对我的理解毫无帮助。
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)]