找到由输入数字的数字形成的最大数字

Var*_*run 4 python

我试图写一个函数,返回由输入整数的数字形成的最大数字.因此,如果输入= 123584输出应为= 854321

我的代码是 -

def maxNumber(inputNumber):
    x = len(str(inputNumber))
    max_number = []
    result= []
    while(x>0):
        max_number.append(inputNumber%10)
        inputNumber = inputNumber/10
        x -= 1
    while(x<(len(str(max_number)))):
        result.append(max(max_number))
        x += 1
    return result

print maxNumber(1238675)
Run Code Online (Sandbox Code Playgroud)

而且当然输出不是我想要的.请帮忙.我渴望学习所有可行的方法.

Sve*_*ach 7

最大的数字是通过按降序排序数字形成的.可以使用以下rverse=True参数获取sorted():

def max_digit_permutation(n):
    return int("".join(sorted(str(n), reverse=True)))
Run Code Online (Sandbox Code Playgroud)


And*_*ark 7

def maxNumber(inputNumber):
    return int(''.join(sorted(str(inputNumber), reverse=True)))
Run Code Online (Sandbox Code Playgroud)


Mar*_*ina 5

这比迄今为止给出的大多数答案更可靠;-)

def max_number(n):
    s = str(n)
    digits = sorted(s, reverse=n>0)
    return int(''.join(digits))

print max_number(231)    
print max_number(-231)    
print max_number(+231)    
Run Code Online (Sandbox Code Playgroud)

好点 - 我错过了单独使用数字的选项 - 这里是为了完整性。:)

from math import *

def max_number(n):
    digit_count = int(log(abs(n+1),10)) + 1 
    digits = sorted([(n / 10 ** (x - 1) % 10)  for x in range(digit_count,0,-1) ], reverse=True)
    return reduce(lambda x, y:10*x + y, digits)

print max_number(1000)
print max_number(999)
print max_number(2345128)
print max_number(231) 
Run Code Online (Sandbox Code Playgroud)