使用动态值和长度对元组进行排序



我正在尝试通过两个参数对数字元组进行排序:

  • 第一个参数,元组的长度:元组越小越好;
  • 第二个参数,元组的第 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对元组本身的排序给予次要重要性,元组本身是逐元素执行的。

最新更新