Python如何处理相等性检查?

时间:2013-09-21 20:54:14

标签: python python-3.x bit-manipulation logical-operators

>>> l=[(i,j,k) for i in {-4,-2,1,2,5,0} for j in {-4,-2,1,2,5,0} for k in {-4,-2,1,2,5,0} if i+j+k==0 if i==0 & j==0 & k==0]
>>> l
[(0, 0, 0), (0, 2, -2), (0, -2, 2)]

上面的Python 3代码找到三元组(i,j,k),使得i + j + k = 0,所有元素都是0.所以答案应该是(0,0,0)。

但答案是[(0,0,0),(0,2,-2),(0,-2,2)]

经过一些搜索,我发现问题在于使用&而不是and。我知道and是一个逻辑运算符,&是一个按位运算符。

但我无法弄明白为什么我使用&得到了答案。

Python3如何处理等式检查操作?

2 个答案:

答案 0 :(得分:1)

你的间距

i==0 & j==0 & k==0

误导你; ==的优先级低于&,因此计算实际上是

i == 0&j == 0&k == 0

因为0&anything为0,所以

i == 0 == 0 == 0

相同
i == 0

因为Python链比较(例如4 < x < 10)。

因此

[(i,j,k) for i in {-4,-2,1,2,5,0} for j in {-4,-2,1,2,5,0} for k in {-4,-2,1,2,5,0} if i+j+k==0 if i==0 & j==0 & k==0]

会将每个(i,j,k)元组赋予i+j+k = 0i = 0,其中i = 0j = -k

答案 1 :(得分:0)

删除此内容:if i==0 & j==0 & k==0

解决方案:

>>> l=[(i,j,k) for i in {-4,-2,1,2,5,0} for j in {-4,-2,1,2,5,0} for k in {-4,-2,1,2,5,0} if i+j+k==0 and (i==0 and j==0 and k==0)]
>>> l
[(0, 0, 0)]