Python入門の高次関数と内蔵高次関数(map、reduce、filter、sorted)
3058 ワード
1高次関数
1.1高次関数とは:
高次関数とは、入力または出力として関数を受け入れる関数です.すなわち、実パラメータは関数名であり、関数の戻り値は関数です.Pythonにはmap()関数、reduce()関数、filter()関数、sorted()関数など、一般的な高次関数がいくつか組み込まれています.1.2高次関数の例:
2高次関数の組み込み
2.1高次関数map():
具体的な使い方:map()は2つのパラメータを受信し、1つは関数であり、1つはシーケンスmapが入力した関数をシーケンスの各要素に順次作用させ、結果を新しいシーケンスとして返す.
(1)シーケンス[-1,3,-5,-2]の各要素について絶対値を求める:
(2)10個の2-7の間の乱数があって、各要素に対して階乗を求めます
(3)文字列をリストに変換
2.2高次関数reduce():
具体的な使い方:reduce:1つの関数を1つのシーケンスに作用させ、この関数は2つのパラメータを受信しなければならない.reduceは結果の継続とシーケンスの次の要素を累積してreduce(f,[x 1,x 2,x 3,x 4,x 5])=f(f(f(x 1,x 2),x 3),x 4)python 2の計算を行う.reduceは内蔵関数python 3のfrom functools import reduceである
(1)1-5の階乗を計算する
(2)1-9の和を計算する
2.3高次関数filterを内蔵する():
具体的な使い方:filterフィルタ関数は1つの関数の1つのシーケンスを受け取って、filterは入ってきた関数を順番に各要素に作用して、返しの値がTrueかFalseかによって決定してその要素を保留してそれとも捨てて1-100の間の偶数を探し出します
2.4高次関数sorted()を内蔵:
具体的な使い方:反復可能なオブジェクトをソートするために使用されるのは、リストのsort関数とは異なり、後者は元の位置でソートされ、ソート後の元のリストの要素の順序が変更され、前者はソート後の構造を新しいリストに生成します.
(1)sorted関数は、指定された条件に従ってシーケンスをソートすることもできます.フォーマット:sorted(シーケンス、key=条件)
(2)sorted関数練習
1.1高次関数とは:
高次関数とは、入力または出力として関数を受け入れる関数です.すなわち、実パラメータは関数名であり、関数の戻り値は関数です.Pythonにはmap()関数、reduce()関数、filter()関数、sorted()関数など、一般的な高次関数がいくつか組み込まれています.1.2高次関数の例:
#
def fun(x,y,f):
return f(x),f(y)
print(fun(-10,34,abs))
# ,
f = abs
print(f(-10))
2高次関数の組み込み
2.1高次関数map():
具体的な使い方:map()は2つのパラメータを受信し、1つは関数であり、1つはシーケンスmapが入力した関数をシーケンスの各要素に順次作用させ、結果を新しいシーケンスとして返す.
(1)シーケンス[-1,3,-5,-2]の各要素について絶対値を求める:
print(list(map(abs,[-1,3,-5,-2])))
(2)10個の2-7の間の乱数があって、各要素に対して階乗を求めます
def jc(x):
res = 1
for i in range(1,x+1):
res *= i
return res
li = [random.randint(2,7) for i in range(10)]
print(li)
print(list(map(jc,li)))
(3)文字列をリストに変換
#'1 3 5 7 9'
s = '1 3 5 7 9'
print(list(map(int,s.split())))
2.2高次関数reduce():
具体的な使い方:reduce:1つの関数を1つのシーケンスに作用させ、この関数は2つのパラメータを受信しなければならない.reduceは結果の継続とシーケンスの次の要素を累積してreduce(f,[x 1,x 2,x 3,x 4,x 5])=f(f(f(x 1,x 2),x 3),x 4)python 2の計算を行う.reduceは内蔵関数python 3のfrom functools import reduceである
(1)1-5の階乗を計算する
from functools import reduce
def multi(x,y):
return x*y
print(reduce(multi,range(1,5)))
(2)1-9の和を計算する
def add(x,y):
return x+y
print(reduce(add,range(1,10)))
2.3高次関数filterを内蔵する():
具体的な使い方:filterフィルタ関数は1つの関数の1つのシーケンスを受け取って、filterは入ってきた関数を順番に各要素に作用して、返しの値がTrueかFalseかによって決定してその要素を保留してそれとも捨てて1-100の間の偶数を探し出します
def isodd(num):
if num % 2 == 0:
return True
else:
return False
print(list(filter(isodd,range(1,101))))
2.4高次関数sorted()を内蔵:
具体的な使い方:反復可能なオブジェクトをソートするために使用されるのは、リストのsort関数とは異なり、後者は元の位置でソートされ、ソート後の元のリストの要素の順序が変更され、前者はソート後の構造を新しいリストに生成します.
li = [2,1,4,3]
li.sort(reverse=True)
print(li) ## sort sorted ,reverse=True
a = sorted(li,reverse=True)
print(a)
(1)sorted関数は、指定された条件に従ってシーケンスをソートすることもできます.フォーマット:sorted(シーケンス、key=条件)
info = [
('apple1',200,32),
('apple2',40,12),
('apple3',40,2),
('apple4',1000,23),
('apple5',40,5),
]
print(sorted(info))
#
def sorted_by_count(x):
return x[1]
#
def sorted_by_price(x):
return x[2]
# ,
#
def sorted_by_count_price(x):
return x[1],x[2]
print(sorted(info,key=sorted_by_count))
print(sorted(info,key=sorted_by_price))
print(sorted(info,key=sorted_by_count_price))
(2)sorted関数練習
, 0 , 0 ;
, ;
# :
, ;
4
0
7
0
2
# :
;
4
7
2
0
0
"""
a = ''.join(input().split())
li = [int(i) for i in a]
def f(x):
if x == 0:
return 1
else:
return 0
#[0,0,0,1,1] ————>[4,7,2,0,0]
# 0,1 ,0 key4,7,2;1 key0
print(sorted(li,key=f))