在python中理解lambda的sort函数

时间:2015-07-08 23:27:10

标签: python lambda

我正在尝试在python中对列表进行排序。我写了以下代码:

def sort(intervals):
    if intervals == [] : return []  
    intervals.sort(key = lambda x:x.start)
    return intervals

a = [[1,3],[8,10],[15,18],[2,6]]
print(sort(a))

我收到以下错误:

AttributeError: 'list' object has no attribute 'start'

请有人解释lambda函数的排序和上述错误的一些细节。谢谢!!

4 个答案:

答案 0 :(得分:5)

您的错误消息的原因是您sort基于不属于list的属性start attribute不是list')的{​​{1}} 1}},快速修复,要么使用sort的{​​{1}}方法,要么使用内置方法list

1 - 使用sorted的{​​{1}}方法:

sort

2 - 使用内置方法list

intervals.sort(key = lambda l:l[0])

详细了解此wiki帖子中的排序列表,非常有趣。

答案 1 :(得分:2)

您应该使用:

intervals.sort(key = lambda x:x[0])

lambda是制作功能的快捷方式。例如,

def getFirst(x):
   return x[0]

等于:

getFirst = lambda x: x[0]

我想你应该阅读official documentation

PS:请注意,您正在进行到位排序。如果不这样,您也可以使用sorted(a, key=lambda x:x[0])返回排序数组的另一个副本。

答案 2 :(得分:0)

使用lambda会创建一个匿名函数,其中x是参数。 Key基本上是将此函数的结果作为排序的基础。可以找到更深入的答案here

但看起来你正在寻找这样的东西:

intervals.sort(key = lambda x:x[0])

x[0]显然是每个列表的第一个元素。

答案 3 :(得分:0)

实际上不必使用lambda函数对列表列表进行排序。请看以下示例:

a = [[1,3],[8,10],[15,18],[2,6],[2,5]]
print (sorted(a))

...这给出了输出:

[[1, 3], [2, 5], [2, 6], [8, 10], [15, 18]]

...因此,它不仅对每个子列表的第一个元素进行排序,而且如果两个子列表的第一个元素相等,则使用后续元素作为键。