您使用了错误的操作你想boolean and
; &
is a bitwise operator:
[(i,j,k) for (i,j,k) in [(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)) ] ]
你可以消除嵌套列表理解,它是多余的:
[(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))]
接下来,使用itertools.product()
function至g enerate所有的组合,而不是嵌套循环,并all()
测试,如果所有的值不为零:
from itertools import product
[t for t in product({-4,-2,1,2,5,0}, repeat=3) if sum(t) > 0 and all(t)]
,但你可能也忽略自定0
并保存自己的all()
测试:
from itertools import product
[t for t in product({-4,-2,1,2,5}, repeat=3) if sum(t) > 0]
,也许你想纠正测试等于 0:
from itertools import product
[t for t in product({-4,-2,1,2,5}, repeat=3) if sum(t) == 0]
结果:
>>> [t for t in product({-4,-2,1,2,5}, repeat=3) if sum(t) == 0]
[(1, 1, -2), (1, -2, 1), (2, 2, -4), (2, -4, 2), (-4, 2, 2), (-2, 1, 1)]
外部理解的原因是什么?它实际上并没有做任何有用的事情,但你必须有写作的理由。 – user2357112
真的,我第一次尝试没有它..但它仍然没有工作..因此,我看到它是否适用于它.. – abhididdigi