2016-08-03 18 views
-3

私の質問はHow to check if all elements of a list matches a conditionと全く同じです。 しかし、私はforループで同じことをする正しい方法を見つけることができませんでした。 たとえば、Pythonですべてを使用してのようです:リストのすべての要素がforループの条件と一致するかどうかを確認する最善の方法は?

>>> items = [[1, 2, 0], [1, 0, 1], [1, 2, 0]] 
>>> all(item[2] == 0 for item in items) 
False 

しかし、私はこの

>>> for item in items: 
>>> if item[2] == 0: 
>>>  do sth 
>>> elif all(item[1] != 0) 
>>>  do sth 

のようなforループ内のすべての要素をチェックするために同様の方法を使用したい「すべて」表現することはできませんここで使われる。ここでは "elif all(item [2] == 0)"のような方法がありますか?リスト内のすべての要素がforループ内の条件と一致するかどうかをチェックする方法は?ここで

+0

Pythonに 'all'や' any'のような組み込み関数がある場合、なぜループを使いたいのですか? –

+0

Forループとif条件が1つあるためです。すべての要素が1つの条件に一致するかどうかをチェックするelse条件を追加したいだけです。そして、このシナリオで「すべて」と「任意」を使用する簡単な方法があることを知りたいだけです。 –

答えて

2

あなたはifelseを持ちたい場合は、あなたはまだanyメソッドを使用することができます

if any(item[2] == 0 for item in items): 
    print('There is an item with item[2] == 0') 
else: 
    print('There is no item with item[2] == 0') 

anythis answerから来ます。

+0

ありがとう、これは私が欲しいものです! –

1

items = [[1, 2, 0], [1, 0, 1], [1, 2, 0]] 

def check_list(items): 
    for item in items: 
     if item[2] != 0: 
      return False 
    return True 

print(check_list(items)) 

あなたはそれをもう少し一般的なようにしたい場合:

def my_all(enumerable, condition): 
    for item in enumerable: 
     if not condition(item): 
      return False 
    return True 

print(my_all(items, lambda x: x[2]==0) 
0

はこれを試してみてください -

prinBool = True 
for item in items: 
    if item[2] != 0: 
    prinBool = False 
    break 
print prinBool 
+0

これは 'False'の場合のみ表示し、' True'の場合は表示しません。 –

+0

はい、それは偽のみを印刷します –

+1

編集済み回答、それは両方とも印刷されます –

0

あなたが持つforループを使用することができますelse句:

elseの後のステートメントは、シーケンスの項目が使い果たされたとき、つまりループがbreakで終了しなかったときに実行されます。

+0

ありがとう、私はこのシナリオで一度にすべての要素をチェックする方法はありますか? –

-1

このようなことをお考えですか? functools

for item in items: 
    for x in range (0,3): 
     if item[x] == 0: 
      print "True" 
0

、それが容易になります。

from functools import reduce 

items = [[1, 2, 0], [1, 0, 1], [1, 2, 0]] 
f = lambda y,x : y and x[2] == 0 
reduce(f,items) 
関連する問題