>>> 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如何处理等式检查操作?
答案 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 = 0
和i = 0
,其中i = 0
和j = -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)]