【问题标题】:How does Python handle equality checking?Python 如何处理相等检查?
【发布时间】:2013-09-21 20:54:14
【问题描述】:
>>> 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如何处理相等检查操作?

【问题讨论】:

  • 我不明白这与相等性检查有什么关系。
  • 我是这里的新手。所以如果你觉得有问题,请编辑标题。

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


【解决方案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

【讨论】:

    【解决方案2】:

    删除这个: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)]
    

    【讨论】:

    • 先生,我终于用and 做到了。但我想知道造成这种输出差异的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 2018-12-22
    • 1970-01-01
    相关资源
    最近更新 更多