Я надеюсь, что следующий фрагмент может помочь.
def num2sym(num, sym, join_symbol=''):
if num == 0:
return sym[0]
if num < 0 or type(num) not in (int, long):
raise ValueError('num must be positive integer')
l = len(sym) # target number base
r = []
div = num
while div != 0: # base conversion
div, mod = divmod(div, l)
r.append(sym[mod])
return join_symbol.join([x for x in reversed(r)])
Использование для вашего случая:
number = 367891
alphabet = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
print num2sym(number, alphabet) # will print '1xHJ'
Очевидно, вы можете указать другой алфавит, состоящий из меньшего или большего количества символов, затем он преобразует ваш номер в меньшая или большая база. Например, при предоставлении '01' в качестве алфавита выводится строка, представляющая входной номер как двоичный.
Вы можете сначала перетасовать алфавит, чтобы иметь уникальное представление чисел. Это может быть полезно, если вы используете службу сокращения URL-адресов.
Вы можете попробовать эту замечательную библиотеку. https://github.com/intuit/sdp
. На самом деле это новая единица масштаба, которая sdp
(масштабируемая дп ).