【问题标题】:What does this mean: key=lambda x: x[1] ?这是什么意思: key=lambda x: x[1] ?
【发布时间】:2021-01-31 14:57:14
【问题描述】:

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

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])

【问题讨论】:

  • 喂!这是我对 1 小时前提出的另一个问题的回答! :D

标签: python python-2.7


【解决方案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] 作为

【讨论】:

    【解决方案2】:

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

    现在,sort(mylist, key=lambda x: x[1]) 根据应用于列表每个元素的key 的值对mylist 进行排序。同样,max(gs_clf.grid_scores_, key=lambda x: x[1]) 相对于 key 为每个元素返回的任何值返回 gs_clf.grid_scores_ 的最大值。

    我还应该指出,这个特定的函数已经包含在其中一个库中:operator。具体来说,operator.itemgetter(1) 等同于您的key

    【讨论】:

    • “x”在哪里赋值?我的意思是,您根据一个键从 lambda(内联函数)生成的列表中对“mylist”进行排序,但是,在传递给 lambda 之前分配的“x”的值在哪里?
    【解决方案3】:

    来自 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 然后是 [[1,2,3], [2,5,6], [7,8]] 来自 [8,2,5] 的排序序列,即 [2,5,8]。

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

    希望这篇文章对你有帮助。

    【讨论】:

    • x:x[1]是什么意思?
    • 这意味着从 x 中选择第二项,即如果 x= [1,2,3] 则 x[1] = 2。由于 python 使用零索引,x[0] =1, x [1] =2 等
    【解决方案4】:

    另一个使用 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)]
    

    【讨论】:

      【解决方案5】:
      distances.sort(key=lambda x: x[1])
      

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

      【讨论】:

      • x:x[1]是什么意思?
      • f(x) = x_1,其中 x 是一个数组,x_1 是第一个元素
      【解决方案6】:
      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)]
      

      来自官方文档

      【讨论】:

      • 这个答案对我的理解没有任何帮助。
      • student[2] 表示它将按元组中的第三个值排序,即使用 15,12,10
      猜你喜欢
      • 1970-01-01
      • 2020-09-24
      • 2019-04-24
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      • 2020-03-18
      • 2021-08-02
      • 2015-03-24
      相关资源
      最近更新 更多