14

Pythonでリストのすべての値に「または」を適用するにはどうすればよいですか? 私は次のようなことを考えています:

or([True, True, False])

または可能であれば:

reduce(or, [True, True, False])
4

5 に答える 5

31

組み込み関数anyは、あなたが望むことを行います:

>>> any([True, True, False])
True
>>> any([False, False, False])
False
>>> any([False, False, True])
True

anyreduce真の値が見つかったら、シーケンス内の後の項目のテストをショートカットするよりも利点があります。これは、シーケンスが背後に高価な操作を伴うジェネレーターである場合に非常に便利です。例えば:

>>> 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
于 2008-12-20T19:16:37.163 に答える
7

誰も言及していませんが、 " or" は operator モジュールの関数として使用できます。

from operator import or_

その後、上記のように使用できますreduce

any最近の Python では常に " " をアドバイスします。

于 2008-12-20T19:49:58.873 に答える
3
>>> all([True,False,True])
False
>>> any([True,False,True])
True

Python 2.5 以降 (ドキュメント)

于 2008-12-20T19:17:12.233 に答える
2

あなたはこれを行うことができます:

reduce(lambda a,b: a or b, [True, True, False])
于 2008-12-20T19:11:38.593 に答える
1

reduce はあなたのためにそれを行うべきですよね?

>>> def _or(x, y):
...     return x or y
... 
>>> reduce(_or, [True, True, False])
True
于 2008-12-20T19:12:26.500 に答える