ひるあんどんブログ

色々なことに手を出してみるブログ

Absolute sorting

ある並び替えにチャレンジしてみましょう。ここには特定のルールに従った配列があります。

その配列 (タプル) は様々な数字を持っています。 あなたはそれを並び替かえなければいけません。ただし絶対値で且つ昇順で並べ替えてください. 例えば、(-20, -5, 10, 15)の配列は、次のように並び替えされます: (-5, 10, 15, 20) あなたの関数は、並び替え済みの配列、もしくはタプルを返さなければいけません。

条件: 配列内の数値は(絶対値が)ユニークである。

入力: 数値の配列、もしくはタプル。

出力: 絶対値で昇順に並び替えられた配列かタプル(ジェネレーターではなく)。

追記: あなたの関数の結果は、テストの説明パネルでリストとして表示されます。

例:

checkio*1 == [-5, 10, 15, -20] # or (-5, 10, 15, -20)

checkio*2 == [0, 1, 2, 3]

checkio*3 == [0, -1, -2, -3]



どのように使われるか: 「並び替え」は多くのタスクの一部としてよく現れるので、どのように使うかを知っていると役に立ちます。

条件: len(set(abs(x) for x in array)) == len(array)
0 < len(array) < 100
all(isinstance(x, int) for x in array)
all(-100 < x < 100 for x in array)

def checkio(numbers_array):
    return sorted(numbers_array,key=lambda x: abs(x))

#These "asserts" using only for self-checking and not necessary for auto-testing
if __name__ == '__main__':
    def check_it(array):
        if not isinstance(array, (list, tuple)):
            raise TypeError("The result should be a list or tuple.")
        return list(array)

    assert check_it(checkio((-20, -5, 10, 15))) == [-5, 10, 15, -20], "Example"  # or (-5, 10, 15, -20)
    assert check_it(checkio((1, 2, 3, 0))) == [0, 1, 2, 3], "Positive numbers"
    assert check_it(checkio((-1, -2, -3, 0))) == [0, -1, -2, -3], "Negative numbers"

pythonでソートするにはsortedを使う。sortedには、どんなルールでsortするかを指定することができる。

 sorted(iterable[, key][, reverse])

    iterable の要素を並べ替えた新たなリストを返します。

    二つのオプション引数があり、これらはキーワード引数として指定されなければなりません。

    key は 1 つの引数からなる関数を指定します。これはリストの各要素から比較のキーを取り出すのに使われます: key=str.lower。デフォルト値は None です (要素を直接比較します)。

    reverse はブール値です。True に設定された場合、リストの要素は各比較が反転したように並び替えられます。

lambdaで局所関数を定義して、それを渡しているだけ。

Clear 1位


def checkio(numbers_array):

    """

    The magic of the key :)

    """

    return tuple(sorted(numbers_array, key=abs))

*1:-20, -5, 10, 15

*2:1, 2, 3, 0

*3:-1, -2, -3, 0