何も誇れぬ人生の記録

『ぼくは何も誇れないのが誇りだな』沼田真佑、影裏より

高階関数

関数も項とできる関数(2階述語論理)

'''辞書 d が与えられたとき、 最大の値を持つキー(複数個ならばそのいずれか)を返す関数 max_value_key(d) を、 max を使って定義してください。
'''
# 解答
def max_value_key(d):
  return max(d, key=lambda x: d[x])

# 例 (map)
list(map(lambda x: x+1, map(abs, [3,-8,1,0,7,-5])))
#Out: [4, 9, 2, 1, 8, 6]
sum(map(lambda x: x+1, map(abs, [3,-8,1,0,7,-5])))
#Out: 30

# 解答
def max_abs(ln):
  return max(map(abs, ln))

# 例 (filter)
def pos(x):
    if x>0:
        return True
    else:
        return False

list(filter(pos, [3,-8,1,0,7,-5]))

'''数のリスト ln と数 n を受け取って、
ln の要素のうち、n より大きい個数を返す
関数 number_of_big_numbers(ln, n)
'''

# 解答
def number_of_big_numbers(ln, n):
  return len(tuple(filter(lambda x: x>n, ln)))

print(number_of_big_numbers([10, 0, 7, 1, 5, 2, 9], 5) == 3)

# 解答
def number_of_long_lines(file, n):
  with open(file, 'r', encoding='utf-8') as f:
    return len(list(filter(lambda x: len(x)>n, f)))