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