カスタム高階関数
sort
、max
、min
のような関数は、key=
のような関数を引数として受け取り、その挙動を決定することができます。これにより、組み込み関数のsort
やmax
は非常に強力で汎用的になります。key=
引数なしで値自体を比較するだけの場合よりも、多くの場面で活用できます。私たちも自分自身の高階関数を作成することができます:
def modify(numbers, f):
res = [f(n) for n in numbers]
return res
print(modify([1, 2, 3], lambda x: x**2)) # [1, 4, 9]
print(modify([1, 2, 3], lambda x: -x)) # [-1, -2, -3]
print(modify([2, 0, 1], lambda x: 2 * x)) # [4, 0, 2]
print(modify([2, 0, 1], str)) # ['2', '0', '1']
ここでは、さまざまな関数を
f
として高階関数modify
に渡しています。modify
関数は入力リストから新しいリストを作成し、その結果を返します。str
のような関数を渡すこともできることに注意してください。その場合、入力リストの各要素にstr()
関数が適用されます—str(2)
、str(0)
、str(1)
。 Challenge
コレクション(リスト、セット、タプルのリストなど)を第一引数に取り、各要素から数値を取得する関数を第二引数に取る、
sum
関数の汎用バージョンであるgeneric_sum
を実装してください。def generic_sum():
...
print(generic_sum([1, 2, 3], lambda x: x)) # 6
print(generic_sum({1, 2, 3}, lambda x: x)) # 6
print(generic_sum([(1, 3), (4, 6)], lambda x: x[0] + x[1])) # 14
Constraints
Time limit: 2 seconds
Memory limit: 512 MB
Output limit: 1 MB