对大数进行排序

Sorting large numbers

如果 Python 中有一个非常非常大的数字列表,以至于编译器无法将它们的值作为数字获取。是否有以更有效的方式(例如将数字与数字进行比较)对该列表进行排序(同时将数字保持为整数)的功能? (但不转换为字符串)

Python 2 和 Python 3 都处理任意大的整数:

>>> [2**34, 2**38, 2**99, 2**122, 2]
[17179869184, 274877906944, 633825300114114700748351602688L, 5316911983139663491615228241121378304L, 2]

并按预期对它们进行排序:

>>> sorted(_)
[2, 17179869184, 274877906944, 633825300114114700748351602688L, 5316911983139663491615228241121378304L]

(Python 2 将为大于 sys.maxint 的整数显示 L,如此处的示例所示,而 Python 3 将为更小或更小的整数显示相同的整数值更大的整数)

这将是适用于其他语言的解决方案。你可以有一个整数列表的列表。所以基本上,给定一个像 123456789 这样的数字,你可以将它表示为

bigNum = [[1,2,3],[4,5,6],[7,8,9]]

比较大的数字可以通过以下方式完成:

  • 比较位数
  • 如果位数相等,则从最大位开始比较。