5

私は試してみます:

[True,True,False] and [True,True,True]

[True、TrueTrue]を取得します

しかし

[True,True,True] and [True,True,False]

与える

[True,True,False]

他のPythonブール値の比較の質問をいくつか調べた後でも、なぜそれがそれらの奇妙な結果をもたらすのかよくわかりません。整数は同じことをします(上記のTrue->1とFalse->0を置き換えれば、結果は同じです)。私は何が欠けていますか?明らかに欲しい

[True,True,False] and [True,True,True]

評価する

[True,True,False]
4

7 に答える 7

7

他の人は何が起こっているのかを説明しています。欲しいものを手に入れるには、次の方法があります。

>>> a = [True, True, True]
>>> b = [True, True, False]

リストコンプを使用します。

>>> [ai and bi for ai,bi in zip(a,b)]
[True, True, False]

and_関数を次のように使用しますmap

>>> from operator import and_
>>> map(and_, a, b)
[True, True, False]

または私の好みの方法(これには必要ですがnumpy):

>>> from numpy import array
>>> a = array([True, True, True])
>>> b = array([True, True, False])
>>> a & b
array([ True,  True, False], dtype=bool)
>>> a | b
array([ True,  True,  True], dtype=bool)
>>> a ^ b
array([False, False,  True], dtype=bool)
于 2012-10-15T15:33:36.563 に答える
5

入力されたリストはすべてに評価されTrueます。True and x、2番目のリストを生成しxます。

于 2012-10-15T15:26:18.217 に答える
5

Pythonのドキュメントから:

式 x および y は、最初に x を評価します。x が false の場合、その値が返されます。それ以外の場合、y が評価され、結果の値が返されます。

2 番目の値が返されます。

PS私もこれまでこの動作を見たことがなかったので、自分で調べなければなりませんでした。私の素朴な期待は、ブール式がブール値の結果をもたらすというものでした。

于 2012-10-15T15:29:57.767 に答える
1

[True, True, False]and(演算子のために)ブール値として評価されており、True空ではないために評価されます。と同じ[True, True, True]です。どちらのステートメントの結果も、and演算子の後にあるものになります。

[ai and bi for ai, bi in zip(a, b)]リストaやのようなことをすることができますb

于 2012-10-15T15:27:35.267 に答える
1

andすべてが に評価される場合、最後の要素を返しますTrue

>>> 1 and 2 and 3
3

リストが空でない場合に評価されるリストにも同じことが当てはまりTrueます(あなたの場合のように)。

于 2012-10-15T15:28:34.860 に答える
1

私の知る限り、リストをざっと見る必要があります。この種のリスト内包表記を試してください:

l1 = [True,True,False]
l2 = [True,True,True]
res = [ x and y for (x,y) in zip(l1, l2)]
print res
于 2012-10-15T15:33:18.260 に答える
0

Python はそのブール値を短絡することで機能し、結果式を結果として返します。データが入力されたリストは true と評価され、2 番目のリストの値として結果が返されます。これを見てください、あなたの最初のリストと 2 番目のリストの位置を入れ替えたところです。

In [3]: [True,True,True] and [True, True, False]
Out[3]: [True, True, False]
于 2012-10-15T15:29:57.140 に答える