Вы используете неправильный оператор Вы хотите 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 к г 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