summer_tree_home

Check iOでPython3をマスターするぜっ

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 も終わり。次はどこに行こうかな~。