Pythonでリストのすべての値に「または」を適用するにはどうすればよいですか? 私は次のようなことを考えています:
or([True, True, False])
または可能であれば:
reduce(or, [True, True, False])
組み込み関数any
は、あなたが望むことを行います:
>>> any([True, True, False])
True
>>> any([False, False, False])
False
>>> any([False, False, True])
True
any
reduce
真の値が見つかったら、シーケンス内の後の項目のテストをショートカットするよりも利点があります。これは、シーケンスが背後に高価な操作を伴うジェネレーターである場合に非常に便利です。例えば:
>>> def iam(result):
... # Pretend this is expensive.
... print "iam(%r)" % result
... return result
...
>>> any((iam(x) for x in [False, True, False]))
iam(False)
iam(True)
True
>>> reduce(lambda x,y: x or y, (iam(x) for x in [False, True, False]))
iam(False)
iam(True)
iam(False)
True
any()
Python のバージョンに,ビルトインがない場合、Guido van Rossum が提案しall()
たように簡単に実装できます。
def any(S):
for x in S:
if x:
return True
return False
def all(S):
for x in S:
if not x:
return False
return True
誰も言及していませんが、 " or
" は operator モジュールの関数として使用できます。
from operator import or_
その後、上記のように使用できますreduce
。
any
最近の Python では常に " " をアドバイスします。
>>> all([True,False,True])
False
>>> any([True,False,True])
True
Python 2.5 以降 (ドキュメント)
あなたはこれを行うことができます:
reduce(lambda a,b: a or b, [True, True, False])
reduce はあなたのためにそれを行うべきですよね?
>>> def _or(x, y):
... return x or y
...
>>> reduce(_or, [True, True, False])
True