間違った演算子を使用しています。ブール値and
が必要です。&
はビット演算子です:
[(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()
関数を使用して、ネストされたループの代わりにすべての組み合わせを生成し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
ただし、セットから the を省略して、自分で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)]