This is more reliable than most of the answers so far given; -)
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)
And a good point - I missed the option of doing this with number one - here it is for completeness. :)
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)
source share