この質問は楽しいことです。私はその答えが役に立つとは思わない。Pythonに `and`や` or`の組み込み関数版がありますか?
私はreduce()
でPythonで作業する人を見ると、しばしばoperator
モジュールからPythonの組み込み関数を利用することがよくあります。
これは動作します:
result = reduce(lambda a, b: a + b, range(5))
しかし、通常、あなたがこの参照になります。私には奇妙な何
from operator import add
result = reduce(add, range(5))
はoperator
モジュールは、論理and
する機能を持っているようには見えないということです。それはビット単位でのを持っていますが、論理的ではありませんand
です。
ですから、これをやっているとします
result = reduce(lambda a, b: a and b, range(1, 6))
は、ここで使用することができ、組み込み関数はありますか?
or
を置き換えることができる組み込み関数があるかどうかは疑問です。
あなたが最初のブール値に引数をマッピングする場合は、ビット単位を使用してoperator
から、あるいは単に直接そうように、bool.__and__
を使用することができます。or
操作のためのoperator.or_()
またはbool.__or__
と
from operator import and_
result = reduce(and_, map(bool, range(1, 6)))
result = reduce(bool.__and__, map(bool, range(1, 6)))
と同様に。しかし、私はブール値にマップされた値を必要としない関数を探しています。
値がすべて整数であることが分かっていた場合はand
にはoperator.mul
、or
にはoperator.add
を使用できます。これは粗雑なハックであり、私はこの答えを望まない...特に、多数の数字に遭遇し、どれもゼロでなかったら、乗算がどれほど高価であるかを考慮して!
注:私にはall()
とany()
がありますが、これはreduce()
の使用に適しています。私がトップで言ったように、私はこれを楽しみにしています。
注:すべての値をbool
に強制するという副作用がある関数は、受け入れられる回答になります。
x = 3 and 5 # sets x to 5, not to True
をしかし、この質問の目的のために、私は論理的and
またはor
操作を行うためにreduce()
と連携できる機能で、単に興味があります:ビルトインand
キーワードはこれを行いません。
でその仕事を作る方法見当がつかない'aとb'と' aとb'の 'all((a、b))'のようになります。もちろん、次にタプルを作る必要があります。短絡はありません。 – kindall
'x = 3と5'は' x'を '5'に設定しますが、それをブール値にキャストすることもできますそれを使わない?ポイントは、 'x'を評価しようとする論理式が何であれ、ブール値として解釈されるということです。 – whatyouhide
@steveha素敵な質問です。私はあなたが答えを得ることを願っていますが、あなたが答えの中のすべての選択肢を既に通り抜けたように思えます – jamylak