如何将这个lambda命令转换为Python中的函数?

时间:2016-11-11 15:59:03

标签: python lambda

如何使用lambda命令将以下代码行转换为函数?

我正在努力解决lambda的问题,并希望将它应用于我发现的一个例子。当我将xy放入其自身功能时,我感到很困惑,例如def sortedList(myList)

lambda的行如下:

myList = [[1,2],[19,20],[2,3]]    
listNums = sorted(myList, 
                      sortList = lambda x,y: x[0] + y[0] if x[0] == y[0] else y[1] - x[1])

1 个答案:

答案 0 :(得分:1)

listNums = sorted(myList, 
                  sortList = lambda x,y: x[0] + y[0] if x[0] == y[0] else y[1] - x[1])

相当于

def funcname(x,y):
    return x[0] + y[0] if x[0] == y[0] else y[1] - x[1]

listNums = sorted(myList, sortList=funcname)

但是,这不是sorted的正确语法 - 它应该是

listNums = sorted(mylist, cmp=funcname)

要解决您的评论,已排序使用cmp功能对列表中的元素进行排序。在你的问题中,你的清单是 [[1,2],[19,20],[2,3]]。基本问题是,首先是[1,2]还是[19,20]?因为这个问题几乎可以通过无限的方式回答,所以它可以让你用cmp函数提供答案。在这种情况下,要确定哪一对首先排序,排序将运行cmp(x=[1,2], y=[19,20])。如果值> 0,它假设x更高,如果它是< 0它认为y更高,如果返回值为0,则表示它们是相同的值。

您选择的示例似乎是一种奇怪的比较方法...如果第一个值相等,则返回第一个值的总和?如果它们都是正数,则x将始终更高,如果它们都是负数,则y将始终更高。如果它们不相等,则仅根据第二个值进行排序。