高階関数
他の関数をパラメータとして受け取ったり、関数を出力として返す関数を高階関数と呼びます。関数を引数として渡すことも、関数を返すこともできます。これにより、汎用的なコードを書き、さまざまな場所で再利用することが非常に便利になります。
例えば、
sort()
や sorted()
関数は高階関数です。これらには key
という引数を渡すことができ、ソートの方法を決定するために使用されます。タプルのリストがあり、そのタプルの要素の合計に基づいてリストをソートしたいとします。items = [(3, 6), (1, 8), (4, 4), (6, 1)]
items.sort(key=lambda x: x[0] + x[1])
print(items)
# [(6, 1), (4, 4), (3, 6), (1, 8)]
ここでは、単一の要素を引数として取り、その要素に基づいてソートする値を返すラムダ関数を渡しています。
自分自身で高階関数を定義することもできます:
def do(num1, num2, operation):
res = operation(num1, num2)
print(num1, num2, res)
do(2, 3, lambda x, y: x + y) # 2 3 5
do(2, 3, lambda x, y: x - y) # 2 3 -1
do(2, 3, lambda x, y: x * y) # 2 3 6
関数
do()
は3つの引数を持っています:最初の数 num1
、2つ目の数 num2
、そしてこれらの数に対して実行される operation
です。最初の呼び出しでは加算、2番目では減算、最後では乗算を関数に指示しています。 チャレンジ
n
個の数の三つ組のリストが与えられます。これらの三つ組を、その合計でソートしてください。つまり、最終的なリストでは、三つ組の合計が非減少の順序になっている必要があります。入力の最初の行には、単一の整数
n
が含まれます(これは三つ組の数です)。次の n
行には、スペースで区切られた3つの整数が含まれています。プログラムは
n
行を出力します—結果として得られる三つ組のリストです。各行には、スペースで区切られた3つの数が含まれます。同じ合計の三つ組が複数ある場合、入力で先に現れたものが出力でも先に現れる必要があります(sort
や sorted
関数はこの順序を保持します—これは安定ソートと呼ばれます)。入力 | 出力 |
3
10 4 0
12 1 1
6 7 8 | 10 4 0
12 1 1
6 7 8 |
Constraints
Time limit: 2 seconds
Memory limit: 512 MB
Output limit: 1 MB