如何使用lambda命令将以下代码行转换为函数?
我正在努力解决lambda的问题,并希望将它应用于我发现的一个例子。当我将x
和y
放入其自身功能时,我感到很困惑,例如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])
答案 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将始终更高。如果它们不相等,则仅根据第二个值进行排序。