【问题标题】:Generate tailor made thousand delimiter生成量身定制的千位分隔符
【发布时间】:2016-08-21 17:56:14
【问题描述】:

我想在 Python 中定制一千个分隔符。我正在生成 HTML 并想使用   作为千位分隔符。 (看起来像:1 000 000)

到目前为止,我找到了以下添加,作为分隔符的方法:

>>> '{0:,}'.format(1000000)
'1,000,000'

但我认为无法使用类似的结构来获得另一个分隔符。 '{0:|}'.format(1000000) 例如不起作用。有没有一种简单的方法可以使用任何东西( )作为千位分隔符?

【问题讨论】:

  • Here 你可以找到基于正则表达式的方法。

标签: python number-formatting


【解决方案1】:

嗯,你总是可以这样做的:

'{0:,}'.format(1000000).replace(',', '|')

结果:'1|000|000'


这是一个简单的算法。之前的版本(ThSep 两个修订版)没有处理像  这样的长分隔符:

def ThSep(num, sep = ','):
    num = int(num)

    if not num:
        return '0'

    ret = ''
    dig = 0
    neg = False

    if num < 0:
        num = -num
        neg = True

    while num != 0:
        dig += 1
        ret += str(num % 10)
        if (dig == 3) and (num / 10):
            for ch in reversed(sep):
                ret += ch
            dig = 0

        num /= 10

    if neg:
        ret += '-'

    return ''.join(reversed(ret))

使用ThSep(1000000, '&amp;thinsp;')ThSep(1000000, '|') 调用它以获得您想要的结果。

不过,它比第一种方法慢了大约 4 倍,因此您可以尝试将其重写为生产代码的 C 扩展。这仅在速度很重要的情况下。我在半分钟内转换了2 000 000个负数和正数进行测试。

【讨论】:

  • @BhargavRao,什么都没有。在之前的版本中,ThSep不能处理它们,不是replace的版本
  • 谢谢。但是,PEP 378 已经提到 replace 是正确的方法。所以我想这有点重新发明轮子!无论如何,一点都没有错。好答案。干杯
【解决方案2】:

没有内置方法可以做到这一点,但你可以使用str.replace,如果数字是唯一的现值

>>> '{0:,}'.format(1000000).replace(',','|')
'1|000|000'

PEP 378中提到了这个

该建议适用于浮点数、整数和小数。它还允许轻松替换其他分隔符。例如:

format(n, "6,d").replace(",", "_")

【讨论】:

    猜你喜欢
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 2011-08-17
    相关资源
    最近更新 更多