Couple functions I need, assuming they exist?

George Sakkis gsakkis at rutgers.edu
Mon Jun 20 18:01:30 CEST 2005


> I assume you mean translating something like '1000000' to '1,000,000'?
> I don't know of an existing function that does this, but here's a
> relatively simple implementation:
>
> py> import itertools as it
> py> def add_commas(s):
> ...     rev_chars = it.chain(s[::-1], it.repeat('', 2))
> ...     return ','.join(''.join(three_digits)
> ...                     for three_digits
> ...                     in it.izip(*[rev_chars]*3))[::-1]
> ...

Or for an equivalent less cryptic (IMHO) recipe:

def num2str(num):
    '''Return a string representation of a number with the thousands
    being delimited.

    >>> num2str(65837)
    '65,837'
    >>> num2str(6582942)
    '6,582,942'
    >>> num2str(23)
    '23'
    >>> num2str(-1934)
    '-1,934'
    '''
    parts = []
    div = abs(num)
    while True:
        div,mod = divmod(div,1000)
        parts.append(mod)
        if not div:
            if num < 0: parts[-1] *= -1
            return ','.join(str(part) for part in reversed(parts))


Regards,
George




More information about the Python-list mailing list