-lambda機能10.機能

まず、匿名関数解析

キーワードはlambdaコロンが前に、匿名関数を表すn関数のパラメータは、複数のパラメータを持つことができ表します。匿名関数は制限があり、それが唯一の表現で、書いていないreturn戻り値は、式の結果です。

匿名関数は、関数に名前がないので、関数名の競合を心配していない、という利点があります。また、匿名関数を使用すると、変数に割り当てられた匿名関数を入れ、その後、機能を呼び出すために変数を使用することができ、関数オブジェクトです。

# 这段代码
def calc(x,y):
    return x**y

# 换成匿名函数
calc = lambda x,y:x**y
print(calc(2,5))

def calc(x,y):
    if x > y:
        return x*y
    else:
        return x / y
    
# 三元运算换成匿名函数
calc = lambda x,y:x * y if x > y else x / y
print(calc(2,5))

第二に、高階関数

1.マップ()

地図()関数は、2つの引数、関数を受け入れ、aは反復処理可能であり、受信機能を順次マッピングするシーケンスの各要素に適用し、その結果を新たなイテレータとして返します。トラバーサルシーケンス、シーケンス動作機能の各要素は、最終的には新しいシーケンスを取得します。

def func(x):
    return x*x
 
r = map(func, [1, 2, 3, 4, 5])
print(type(r))
r = list(r)
print(r)

输出结果:
<class 'map'>
[1, 4, 9, 16, 
# 1.求列表[1,2,3,4,5,6,7,8,9],返回一个n*n 的列表

#一般解决方案
li = [1,2,3,4,5,6,7,8,9]
for ind,val in enumerate(li):
    li[ind] = val * val
print(li)
# [1, 4, 9, 16, 25, 36, 49, 64, 81]

# 高级解决方案
li = [1,2,3,4,5,6,7,8,9]
print(list(map(lambda x:x*x,li)))
# [1, 4, 9, 16, 25, 36, 49, 64, 81]

2.(減らします)

[X1、X2、X3、...]シーケンスの関数に減らす、関数は2つのパラメータを受け取り、シーケンスの次の要素の結果を削減し続けなければならない累積ベースの操作を行い、効果がある:削減( FUNC、[1,2,3])は、累積動作シーケンスのすべての要素について)FUNC(FUNC(1,2)、3に相当します。

#接受一个list并利用reduce()求积
from functools import reduce
li = [1,2,3,4,5,6,7,8,9]
print(reduce(lambda x,y:x * y,li))
# 结果=1*2*3*4*5*6*7*8*9 = 362880

3.フィルタ()

フィルタ()は関数とシーケンスを受信します。そしてマップ()異なって、フィルタ()関数は、各要素に適用される順次通過し、戻り値に基づいて、要素を維持するか破棄する正誤判定されます。配列のスクリーニングの要素のための、そして最終的に適格なシーケンスを取得します

# 在一个list中,删掉偶数,只保留奇数
li = [1, 2, 4, 5, 6, 9, 10, 15]
print(list(filter(lambda x:x % 2==1,li)))  # [1, 5, 9, 15]

# 回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数
li = list(range(1, 200))
print(list(filter(lambda x:int(str(x))==int(str(x)[::-1]),li)))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]

4.ソート()

sorted(iterable, /, *, key=None, reverse=False)
  • 受信key目的を達成するために機能することは繰り返し順序をカスタマイズすることが可能

  • 反復可能オブジェクト:主リスト、文字列、タプル、セット、および辞書

  • キー:、関数によって返された結果によると、受信機能をソート

  • リバース:ソート方向を、デフォルトが大きいと小さく、逆に=が真逆

# 对列表按照绝对值进行排序
li= [-21, -12, 5, 9, 36]
print(sorted(li, key = lambda x:abs(x)))
# [5, 9, -12, -21, 36]

"""
sorted()函数按照keys进行排序,并按照对应关系返回list相应的元素:
keys排序结果 => [5, 9,  12,  21, 36]
                |  |    |    |   |
最终结果     => [5, 9, -12, -21, 36]
"""
# 把下面单词以首字母排序
li = ['bad', 'about', 'Zoo', 'Credit']
print(sorted(li, key = lambda x : x[0]))
# 输出['Credit', 'Zoo', 'about', 'bad']
"""
对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。
"""

# 假设我们用一组tuple表示学生名字和成绩:

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
# 请用sorted()对上述列表分别按名字排序
print(sorted(L, key = lambda x : x[0]))
# 输出[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]

# 再按成绩从高到低排序
print(sorted(L, key = lambda x : x[1], reverse=True))
# 输出[('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]

おすすめ

転載: www.cnblogs.com/hq82/p/11708466.html