python; checkio日記

checkioを中心にpythonプログラミングの記録

Elementary 問題 絶対値での並び替え

[-3, 2, 1, -8]なら[1, 2, -3, -8]と並び替える。 リストのindexを取り出してそれで並び替えるというようなことをしたいが、関数を知らないので力技で

def checkio(x):
    ans=[]
    order = sorted([abs(i) for i in x])
    for i in range(len(order)):
        for j in x:
            if abs(j)==order[i]:
                ans.append(j)
    ans
    return ans

Brute Force を使って、あらゆる並び替えを作って、

return x if x == sorted.array

みたいなのでシンプルにもできるかと考えたが並びかえの関数も知らないので、さっさと解いてしまって、他の人の答えで学ぶ。

sorted(x, key=abs)

sortedにkeyオプションがあるのですね 今回はabsをそのまま使えたが、ここを自作の関数にしたい場合は、下記のようにlambdaを使ってつなげればよいようです。

key=lambda x:abs(x)