2016-11-28 10 views
2

私はTDDを使用して、分離した昇順体重の文字列、たとえば"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) 

1つの追加のパラメータは、同僚が提示:

を二つの数が同じ「重み」を持っているとき、彼らは文字列ではなく数値であるかのように、私たちはクラスそれらを聞かせて:、その「100が180の前にあります同じ重み "(9)を有するので、それは文字列として前に来るので、180(9)と180の間にある。

助けてください!ありがとうございました!

MJ

答えて

4

桁の和のタプルを返し、文字列自体

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

タプルは最初の要素が等しい場合、第2の要素とを比較し、そうするようにソートされているキー機能を使用し。

+0

これは素晴らしいです、ありがとうございました –

0

これは、次のようにリストの内包表記を使用して1行で行うことができます。

sは、元の入力文字列である
' '.join([t for _,t in sorted(zip([sum([int(y) for y in x]) for x in s.split()], s.split()))]) 

出力:

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

出力:

'2000 103 123 4444 99' 

別の例ではs

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