Python入門の高次関数と内蔵高次関数(map、reduce、filter、sorted)

3058 ワード

1高次関数
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))