繁体   English   中英

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

[英]Sorting tuples with dynamic values and length

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

  • 第一个参数,元组的长度:元组越小越好;
  • 第二个参数,元组的第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是key参数,它利用匿名( lambda )函数。 Python按元素对元组进行排序。 因此,第一个元素len(x)优先考虑元组的长度。 第二个元素x赋予元组本身排序的次要重要性,它本身是逐个元素执行的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM