The absolute sorting (Library 2.0) - 絶対値でソート
さて、これが Library 2.0 の最後の問題。
どんな問題?
The absolute sorting
http://www.checkio.org/mission/absolute-sorting/
数字を絶対値の小さい順に並べよ。
引数は、整数のタプルで受け取る。
戻り値は、並べ替えたものを、リストまたはタプルで返す。
例題:
checkio((-20, -5, 10, 15)) == [-5, 10, 15, -20] # or (-5, 10, 15, -20) checkio((1, 2, 3, 0)) == [0, 1, 2, 3] checkio((-1, -2, -3, 0)) == [0, -1, -2, -3]
どうやって解く?
sorted() で keyに比較用の関数(ラムダ式)を指定すればいい。
def checkio(numbers_array): return sorted(numbers_array, key=lambda x: abs(x))
これでクリア~。
他の人の答え
def checkio(numbers_array): return sorted(numbers_array, key=abs)
あーそうか、key=absだけでよかったんだ。
他にも、いろいろな解き方があった。
def checkio(numbers_array): # 2乗して比較 return sorted(numbers_array, key=lambda x: x * x)
def checkio(numbers_array): # x が正なら x>0 は True(1)、index=1 は x # x が負なら x>0 は False(0)、index-0 は -x return sorted(numbers_array, key=lambda x: (-x, x)[x > 0])
def checkio(numbers_array): # x が正なら x*1、負なら x*-1 return sorted(numbers_array, key=lambda x: x * (1 if x > 0 else -1))
面白いな~。
さて、これで Library 2.0 も終わり。次はどこに行こうかな~。