ホームページ > バックエンド開発 > Python チュートリアル > Python のマップ、リデュース、フィルターの簡単な分析

Python のマップ、リデュース、フィルターの簡単な分析

WBOY
リリース: 2016-06-16 08:44:20
オリジナル
1122 人が閲覧しました

1. まず反復可能なオブジェクトとは何かを見てみましょう

組み込みの max 関数を例として、そのドキュメントを表示します:

コードをコピーします コードは次のとおりです:

>> ;> print max.__doc__
max(iterable[, key=func]) -> value
max(a, b, c, ...[, key=func) ]) -> 値

反復可能な引数が 1 つある場合は、その最大の項目を返します。
引数が 2 つ以上ある場合は、最大の引数を返します。


max 関数の最初の形式では、最初のパラメーターは反復可能なオブジェクトです。この場合、反復可能なオブジェクトとは何でしょうか?
コードをコピーします コードは次のとおりです:

>>> max('abcx')
>> ;> 'x'
>>> '4'
>> 2,3 ))
>>> 3
>>>max([1,2,4])

yield を使用して反復可能なオブジェクトを生成できます (他の方法もあります):

コードをコピー コードは次のとおりです: def my_range(start,end ):
''' '''
while start <= end:
yield start
start += 1

次のコードを実行します。

コードをコピー コードは次のとおりです:for num in my_range(1, 4):
print num
print max(my_range(1 , 4))

は出力します:

コードをコピー コードは次のとおりです:1
2
3
4
4



2、マップ
map 関数は http://docs.python.org/2/library/functions.html#map で紹介されています:


コードをコピー コード次のように:map(function, iterable, ...)
関数を iterable のすべての項目に適用し、結果のリストを返します。追加の iterable 引数が渡された場合、function は受け取る必要があります。 1 つの反復可能オブジェクトが別の反復可能オブジェクトより短い場合、関数が None の場合は、identity 関数が仮定され、複数の引数がある場合は、その反復可能関数が並列的に適用されます。 () は、すべての反復可能オブジェクトからの対応する項目を含むタプルで構成されるリストを返します (一種の転置操作)。反復可能な引数はシーケンスまたは任意の反復可能なオブジェクトです。

マップ関数カスタム関数は反復可能オブジェクト内の各要素を処理し、すべての処理結果をリストの形式で返します。例:

コードをコピー コードは次のとおりです:def func(x):
''' '''
return x*x

print map(func, [1,2,4,8])print map(func, my_range(1, 4))


実行結果は次のとおりです:



コードをコピー コードは次のとおりです:[1, 4, 16, 64]
[1, 4, 9, 16]

リスト導出によっても実現できます:

コードをコピーします コードは次のとおりです: print [x*x for x in [1,2,4,8]]

3.

を減らす reduce 関数は http://docs.python.org/2/library/functions.html#reduce で次のように紹介されています:


コードをコピー コードは次のとおりです。reduce(function, iterable[,Initializer])
2 つの引数の関数を反復可能項目に左から右に累積的に適用して、反復可能を削減します。たとえば、reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) は ((((1+2)+3)+4)+5) を計算します。左側の引数 x は累積値、右側の引数 y は反復可能からの更新値です。オプションの初期化子が存在する場合、それは計算の反復可能項目の前に配置され、デフォルトとして機能します。 iterable が空の場合、initializer が指定されておらず、iterable に項目が 1 つだけ含まれている場合は、最初の項目が返されます。

これは非常に明確に紹介されています。

Copy code コードは次のとおりです: reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
は同等です

コードをコピー コードは次のとおりです:((((1+2)+3)+4 )+5)

そして:

コードをコピー コードは次のとおりです:reduce(lambda) x、y: x+y、[1、2、3、4、5]、6)

計算と同等
コードをコピー コードは次のとおりです。

(((((6+1) +2) +3)+4)+5)


4. フィルター

フィルタ関数は http://docs.python.org/2/library/functions.html#filter で次のように紹介されています:

コードをコピー コードは次のとおりです。

filter(function, iterable)
関数が true を返す iterable の要素からリストを構築します。 iterable はシーケンス、反復をサポートするコンテナーのいずれかです。 iterable が文字列またはタプルの場合、結果もその型になります。それ以外の場合、関数が None であると仮定され、つまり、 false である iterable のすべての要素が削除されます。 .

filter(function, iterable) は、関数が None でない場合は [item for item in iterable if function(item)] と同等、関数が None の場合は [item for item in iterable if item] と同等であることに注意してください。


パラメーター関数 (関数) は、反復可能オブジェクト内の各要素を処理するために使用されます。要素の処理時に関数が true を返す場合、その要素はリストのメンバーとして返されます。たとえば、文字列内の文字 a をフィルターで除外します。
コードをコピーします コードは次のとおりです。

def func (x):
''' ''
return x != 'a'

print filter(func, 'awake')


実行結果は次のとおりです:
コードをコピーします コードは次のとおりです。

wke
これはリスト内包表記でも実現できます:
コードをコピーします コードは次のとおりです。

print ''.join([x for x in 'awake' if x != 'a'])
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート