我正在为如何通过重新排列然后连接集合中的整数来生成最大整数的问题编写一个解决方案。我被告知对于最大整数,当表示为整数时,集合中任意两个相邻整数的排列大于它们被交换的排列。即给定 {98, 9}; 排列 998 大于 989。这适用于下面给出的示例中的所有组成整数。
我需要编写一些适用于 Python 2.7 和 3.3 的代码,并提出以下 Python 代码:
try:
cmp # Python 2 OK or NameError in Python 3
def maxnum(x):
return ''.join(sorted((str(n) for n in x),
cmp=lambda x,y:cmp(int(y+x), int(x+y))))
except NameError:
# Python 3
from functools import cmp_to_key
def cmp(x, y):
return -1 if x<y else ( 0 if x==y else 1)
def maxnum(x):
return ''.join(sorted((str(n) for n in x),
key=cmp_to_key(lambda x,y:cmp(int(y+x), int(x+y)))))
for numbers in [(1, 34, 3, 98, 9, 76, 45, 4), (54, 546, 548, 60)]:
print('Numbers: %r\n Largest integer: %15s' % (numbers, maxnum(numbers)))
这给出了输出:
Numbers: (1, 34, 3, 98, 9, 76, 45, 4)
Largest integer: 998764543431
Numbers: (54, 546, 548, 60)
Largest integer: 6054854654
现在 Raymond Hettinger 表示 'key=' 优于 'cmp=' 我倾向于同意他的观点(在他的 Pycon 2013 演讲“将代码转换为漂亮的惯用 Python”之前)。我的问题是我无法使用像 cmp 函数这样优雅的关键函数来解决问题。
有任何想法吗?谢谢。