【问题标题】:Big Sorting: How are same-length strings sorted using lambda with key?大排序:如何使用带有键的 lambda 对相同长度的字符串进行排序?
【发布时间】:2017-08-06 17:00:29
【问题描述】:

这是我的代码:

def SortingBigIntegers(arr):
    arr.sort(key = lambda x: (len(x), x))

arr = ["54", "724523015759812365462",
        "870112101220845", "8723","6","9","3"]

SortingBigIntegers(arr)

print " ".join(arr)

相同长度的字符串在这段代码中是如何排序的?

【问题讨论】:

  • 首先是长度,然后是字典。
  • 既然 Python 整数可以任意大,为什么还需要这个?

标签: python lambda key


【解决方案1】:

key 是:

lambda x: (len(x), x)

这意味着它被转换为一个元组。元组首先按第一个元素排序,然后按第二个元素。因此,如果两个字符串的 length 相等,它将按字符串对字符串进行排序。字符串在 Python 中按字典顺序 排序。如果字符串是整数(没有小数点,并且没有前导零等)并且它们具有相同的长度,那么它们的排序就像我们对它们进行排序一样数字地 .

如果值仍然两个条件相同,则顺序将与原始顺序相同:Python 中的排序稳定 em>。

话虽如此,在 中,ints 可以处理任意大小。所以你不必使用字符串,你可以简单地使用ints。

【讨论】:

  • 除非它对于用零填充的整数失败,f.e. ['01', '90', '9'] -> ['9', '01', '90']。另外,Python2 中的long 等价于Python3 中的int
  • @randomir:谢谢。这确实是我没有考虑到的情况。
【解决方案2】:

在函数 SortingBigIntegers(arr, n) 中,您使用了 n 但您只传递了 arr 。所以,你应该避免这个n

然后按照这个过程:

def SortingBigIntegers(arr):
  arr.sort(key=lambda x: (len(x), x))


arr = ["54", "724523015759812365462","870112101220845", "8723", "6", "9", "3"]

SortingBigIntegers(arr)

print(" ".join(arr))

输出:

3 6 9 54 8723 870112101220845 724523015759812365462

【讨论】:

    猜你喜欢
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2014-04-16
    相关资源
    最近更新 更多