python允许使用范围2,36中的任何基数将字符串转换为整数,使用:
int(string,base)我正在寻找一个优雅的反函数,它接受一个整数和一个基数,并返回一个字符串
例如
>>> str_base(224,15)
'ee'我有以下解决方案:
def digit_to_char(digit):
if digit < 10: return chr(ord('0') + digit)
else: return chr(ord('a') + digit - 10)
def str_base(number,base):
if number < 0:
return '-' + str_base(-number,base)
else:
(d,m) = divmod(number,base)
if d:
return str_base(d,base) + digit_to_char(m)
else:
return digit_to_char(m)注意: digit_to_char()适用于基<= 169,可以任意使用'z‘后的ascii字符作为大于36的基的数字
有没有python内置函数,库函数,或者int(string,base)的更优雅的反函数?
发布于 2010-01-14 18:48:34
This thread有一些示例实现。
实际上我认为你的解决方案看起来相当不错,它甚至是递归的,这在某种程度上是令人愉悦的。
我仍然会简化它以删除else,但这可能是个人风格的事情。我认为if foo: return是非常清晰的,不需要在它后面加上else来表明它是一个独立的分支。
def digit_to_char(digit):
if digit < 10:
return str(digit)
return chr(ord('a') + digit - 10)
def str_base(number,base):
if number < 0:
return '-' + str_base(-number, base)
(d, m) = divmod(number, base)
if d > 0:
return str_base(d, base) + digit_to_char(m)
return digit_to_char(m)我简化了digit_to_char()中0-9的情况,我认为str()比chr(ord())结构更清晰。为了最大化与>= 10案例的对称性,可以将ord()分解出来,但我并不费心,因为它会增加一行,简洁性感觉更好。:)
发布于 2013-03-01 00:35:08
也许这不应该是一个答案,但它可能对一些人有帮助:内置的format函数确实可以在几个基数中将数字转换为字符串:
>>> format(255, 'b') # base 2
'11111111'
>>> format(255, 'd') # base 10
'255'
>>> format(255, 'o') # base 8
'377'
>>> format(255, 'x') # base 16
'ff'发布于 2014-05-29 13:54:59
如果你使用Numpy,就会有numpy.base_repr。
您可以在numpy/core/numeric.py下阅读代码。短小精悍
https://stackoverflow.com/questions/2063425
复制相似问题