我有一个列表,其中每个元素的格式为[list of integers, integer]
。
例如,列表的元素可能看起来像[[1,3,1,2], -1]
。
我想按以下标准对包含所述元素类型的列表进行排序:
如果两个元素(即element[0]
)的整数列表长度不同,则整数列表较小的元素较小。
否则,如果整数列表具有相同的长度,则较小的元素是具有较小的整数的元素,该整数在两个元素的整数列表中不同。例如:
[[1,1,99,100], - 1]< [[1,1,100,1], - 1],因为99< 100.
否则,如果整数列表相同,则较小的元素是element[1]
中整数较小的元素。
我如何编写一个可以传递给sorted()或sort()的approriate键函数?
答案 0 :(得分:22)
列出密钥中的三个条件:
sorted(inputlist, key=lambda e: (len(e[0]), e[0], e[1]))
现在,您首先按长度排序每个元素,然后直接比较第一个元素(仅在第一个元素长度相等时使用),然后再按最后一个整数的值进行排序。
Python按字典顺序对元组和列表进行排序;比较第一个元素,并且只有在没有差异的情况下,比较第二个元素等。
此处的第二个元素是e[0]
,仅当两个比较条目都具有相等长度的嵌套列表时才会使用。这些再次按字典顺序进行比较,因此将元素配对,直到一对不同。
答案 1 :(得分:8)
key = lambda x: (len(x[0]), x[0], x[1])
这是有效的,因为元组(和列表)通过依次查看每个元素进行比较,直到找到差异。因此,当您希望按优先顺序对多个条件进行排序时,只需将每个条件以相同的顺序粘贴到元组的元素中。
我假设“较小”的意思与“较小”相同,也就是说你不意味着要比较绝对值。