我正在尝试在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函数的排序和上述错误的一些细节。谢谢!!
答案 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]]
...因此,它不仅对每个子列表的第一个元素进行排序,而且如果两个子列表的第一个元素相等,则使用后续元素作为键。