我正在尝试通过两个参数对数字元组进行排序:
- 第一个参数,元组的长度:元组越小越好;
- 第二个参数,元组的第 n 个值:如果两个元组的长度相同,那么它们应该按它们不同的第一个数值排序
例如,假设我们有以下四个元组:
a = (2, 5) # len(a) == 2
b = (2, 5, 3) # len(b) == 3
c = (2, 4, 3) # len(c) == 3
d = (1, 4, 4, 8) # len(d) == 4
我愿意获得的结果是一个函数,它将帮助我对这些元组进行排序,以便:
- a 是第一个元组(最小的元组(
- B 和 C 紧随其后(中间的(
- d 是最后一个元组(最长元组( 由于 B 和 C 的长度相同,
- 因此它们应排序,使 C 在 B 之前,因为虽然它们的第一个值相同,但 C 的第二个值小于 B 的
因此,上面的四个元组应列为 [a, c, b, d]。
问题是:我该怎么做,知道元组没有固定的长度,并且它们可能在从第一个到最后一个的任何值上有所不同?
您可以使用以下命令对元组进行排序...元组:
res = sorted([a, b, c, d], key=lambda x: (len(x), x))
# [(2, 5), (2, 4, 3), (2, 5, 3), (1, 4, 4, 8)]
关键是key
参数,它使用匿名(lambda
(函数。Python 按元素对元组进行排序。因此,第一个元素len(x)
优先考虑元组的长度。第二个元素x
对元组本身的排序给予次要重要性,元组本身是逐元素执行的。