首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python优雅的int(string,base)反函数

Python优雅的int(string,base)反函数
EN

Stack Overflow用户
提问于 2010-01-14 18:28:04
回答 12查看 50.8K关注 0票数 57

python允许使用范围2,36中的任何基数将字符串转换为整数,使用:

代码语言:javascript
复制
int(string,base)

我正在寻找一个优雅的反函数,它接受一个整数和一个基数,并返回一个字符串

例如

代码语言:javascript
复制
>>> str_base(224,15)
'ee'

我有以下解决方案:

代码语言:javascript
复制
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)的更优雅的反函数?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2010-01-14 18:48:34

This thread有一些示例实现。

实际上我认为你的解决方案看起来相当不错,它甚至是递归的,这在某种程度上是令人愉悦的。

我仍然会简化它以删除else,但这可能是个人风格的事情。我认为if foo: return是非常清晰的,不需要在它后面加上else来表明它是一个独立的分支。

代码语言:javascript
复制
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()分解出来,但我并不费心,因为它会增加一行,简洁性感觉更好。:)

票数 14
EN

Stack Overflow用户

发布于 2013-03-01 00:35:08

也许这不应该是一个答案,但它可能对一些人有帮助:内置的format函数确实可以在几个基数中将数字转换为字符串:

代码语言:javascript
复制
>>> format(255, 'b') # base 2
'11111111'
>>> format(255, 'd') # base 10
'255'
>>> format(255, 'o') # base 8
'377'
>>> format(255, 'x') # base 16
'ff'
票数 33
EN

Stack Overflow用户

发布于 2014-05-29 13:54:59

如果你使用Numpy,就会有numpy.base_repr

您可以在numpy/core/numeric.py下阅读代码。短小精悍

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2063425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档