python内蔵関数-reduce()関数

7038 ワード

reduce()関数は、関数、シーケンス、初期値の3つのパラメータを受信します.reduce()関数の実行方法は、2つのパラメータを受信した1つの関数を、シーケンスに作用する要素が1つしか残っていないまで、左から右に累積することである.初期値のデフォルトはNoneで、存在する場合はシーケンス内の要素計算の前に配置し、シーケンスが空の場合はデフォルトとします.例:
from functools import reduce

reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])

まず計算1 + 2結果を得る3結果と次の要素をパラメータとして関数、すなわち計算3 + 3に、最後まで順に類推する.
計算リスト[1, 2, 3, 4]の各要素の平方和:
a = [1, 2, 3, 4]
b = reduce(lambda x, y: x * x + y * y, a)
print(b)  # 1172

エラー結果が得られたのはreduce()関数の実行順序がわからず、上のコードは計算1^2+2^2=5、再計算5^2+3^2=34、そして34^2+4^2=1172に相当する.実装要件には、次のコードを使用します.
c = reduce(lambda x, y: x + y, [i * i for i in a])
print(c)  # 30

すなわち,まず各要素を二乗操作して累積加算する.
初期値の使用:
d = reduce(lambda x, y: x + y, a, 5)
print(d)  # 15,         ,    str     :TypeError: must be str, not int
d = reduce(lambda x, y: x + y, [], 'abc')
print(d)  #     ,     :'abc'
filter()関数と同様、reduce()関数は他のデータ型を操作することもできます.
res = reduce(lambda x, y: x + ' ' + y, ['Hello', 'tomorrow'])
print(res)  # Hello tomorrow

以下は菜鳥チュートリアルreduce()関数の下で共有されているメモです.文字列の中にある文字が現れた回数を統計するには、まず文字列をリストに入れる必要があります.
sentences = [
    'The Deep Learning textbook is a resource intended to help students and practitioners enter the field of machine learning in general and deep learning in particular. ']

word_count = reduce(lambda a, x: a + x.count('learning'), sentences, 0)
print(word_count)  # 2

この例では、aは初期値0、xは文全体である.初期値が設定されていなければa文全体を表すxは空であり、結果は文全体である.(個人的な理解)