体重转换器

时间:2016-11-28 18:58:59

标签: python math list-comprehension

我正在使用TDD来构建一个Python函数,该函数接收一串分离的升序体重,例如"103 123 4444 99 2000",并根据它们的个体以相同的字符串格式输出相同的数字但按升序排列款项。因此,上述输入应该具有"2000 103 123 4444 99"的结果。

我已经设法将部分分解为根据输入解密正确顺序所需的部分,但是我不确定如何根据我设法计算的各个总和对输入进行重新排序。

你会在第5行注意到我使用了错误的整数,因为它们是总和,而不是原始输入。这只是我试图想象如何将列表转换回单个空格的字符串。

def ordered_weight(strng):
    str_split = strng.split()
    int_split = list(map(int, str_split))
    sum_lst = sorted([sum(map(int, str(i))) for i in str_split])
    return ' '.join(str(x) for x in sum_lst)

同事提出的另一个参数:

  

当两个数字具有相同的“权重”时,让我们将它们分类为字符串而不是数字:100表示​​180之前,因为它的“权重”(1)小于180(9)和180之一因为它具有相同的“重量”(9),它之前是一个字符串。

请帮忙!谢谢! MJ

2 个答案:

答案 0 :(得分:4)

使用键函数返回数字和字符串本身的元组

def ordered_weights(s):
    spl = s.split()
    spl.sort(key=lambda x: (sum(map(int, x)), x))
    return ' '.join(spl)

对元组进行排序,使得如果第一个元素相等,则比较第二个元素,依此类推。

答案 1 :(得分:0)

这可以使用列表推导在一行中完成,如下所示:

' '.join([t for _,t in sorted(zip([sum([int(y) for y in x]) for x in s.split()], s.split()))])

s是原始输入字符串。

<强>输出:

'2000 103 123 4444 99'

使用另一个示例s

s = "123 12 1561 613 63 126 74 2346 11 5612367 47 47 235"

<强>输出:

'11 12 123 126 63 235 613 47 47 74 1561 2346 5612367'