LINUX.ORG.RU

[python] Вывод числа триадами

 


0

0

Функция получает целое положительное число в виде строки и возвращает его разбитое по триадам. У меня так получилось. Может кто-нибудь подскажет более элегантный способ (не считая locale.format)? Спасибо.

def format(string):
    string_length = len(string)

    ends = range(string_length % 3, string_length + 1, 3)
    starts = [0] + ends[:-1]

    return ' '.join(map(lambda a, b: string[a:b], starts, ends))

>>> print format('1234567890')
1 234 567 890
anonymous

на жабке, навскидку:

    public String groupString(String str,int qty) {

        int i = 0;

        String newStr = "";

        if(str.length() == 0 || qty > str.length())

            return str;

        for(i = 0;(str.length()-((qty*i)+qty)) > 0;i++) 

            newStr += str.substring(qty*i ,(qty*i)+qty) + " ";

        newStr += str.substring(qty*i);

        return newStr;

    }

anonymous
()

>более элегантный способ
более извратный?

dimon555 ★★★★★
()

s='1234567890'

def f(s):
    s1 = ''
    for i in range((len(s)/3 + 1)):
        if len(s)<=3:
            s1 += (' ' + s)
        else:
            s1 += (' '+s[:3])
        s=s[3:]
    return s1.strip()

>>> f(s)

'123 456 789 0'

Leron ★★
()

#! /bin/sed

:x

s/\([0-9][0-9]*\)\([0-9][0-9][0-9]\)/\1,\2/

tx

anarquista ★★★★★
()
Ответ на: комментарий от anonymous

или так ещё можно:

format = lambda s: (len(s) > 3) and format(s[:-3])+" "+s[-3:] or s

anonymous
()
Ответ на: комментарий от anonymous

>Спасибо, но неэффективно наращивает строку и разбивает числа на триады не с того конца.

Возможно тогда стоит попробовать itertools, тама в экзамплах похожий пример есть, может побыстрее будет...

Leron ★★
()

Еще такой вариант придумал:

def format(string):
    string_length = len(string)
	
    parts = []
    i, j = 0, string_length % 3 or 3
    while i < string_length:
        parts.append(string[i:j])
        i, j = j, j + 3
	
    return ' '.join(parts)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.