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 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如何处理相等检查操作?

4

2 回答 2

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)元组 wherei+j+k = 0i = 0,所以 wherei = 0j = -k.

于 2013-09-21T21:07:11.920 回答
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)]
于 2013-09-21T21:01:34.130 回答