2011-12-27 8 views
15

コレクション内のすべての要素が条件を満たすかどうかをテストする慣用的なPythonの方法は何ですか?LINQのPythonに相当するすべての関数?

明らかループ方式があります(。.NET All() methodは、C#でうまくこのニッチを埋める):

all_match = True 
for x in stuff: 
    if not test(x): 
     all_match = False 
     break 

そしてトリックを行うことができ、リスト内包表記はなく、無駄なようだ:

all_match = len([ False for x in stuff if not test(x) ]) > 0 

あり持っていますよりエレガントなものになるために...私は何が欠けていますか?

+0

も参照してくださいhttp://stackoverflow.com/questions/8641008/compare-multiple-variables-to-the-same-value-in-if-in-python –

答えて

25
all_match = all(test(x) for x in stuff) 

これは短絡していて、リストを必要としません。繰り返し可能なものはすべて動作します。そのため、いくつかの便利な機能があります。

類似

any_match = any(test(x) for x in stuff) 
+2

もありますハ!とても明らか!良い悲しみ今私はばかげて感じる... – Cameron

+0

間違いなく私は行く方法。しかし、Pythonの 'all'は' Enumerable.All'と異なり、述語を直接取っていません。 (それは 'Enumerable.Where(述語).All()'に似ています。) –