2013-07-04 3 views
1

У меня есть следующее уравнение:Как использовать два условия, если заявление

result=[(i,j,k) for i in S for j in S for k in S if sum([i,j,k])==0] 

Я хочу добавить еще одно условие, если заявление таким образом, что мой результирующий набор не содержит (0,0,0) , Я попытался сделать следующее: result=[(i,j,k) for i in S for j in S for k in S if sum([i,j,k])==0 && (i,j,k)!=(0,0,0)], но я получаю синтаксическую ошибку, указывающую на &&. Я испытал свое выражение для первого условия, и это правильно.

+0

Какой тип из 'S'? –

ответ

8

Вы ищете and boolean operator вместо:

result=[(i,j,k) for i in S for j in S for k in S if sum([i,j,k])==0 and (i,j,k)!=(0,0,0)] 

&& является JavaScript, Java, Perl, PHP, Ruby, Go, OCaml, Haskell, MATLAB, R, Lasso, ColdFusion, C, C# или C++ вместо логического синтаксиса.

+2

&& также является Java, C и C++, ... – Dahaka

+0

и еще несколькими .. –

5
result = [(i, j, k) for i in S 
      for j in S 
      for k in S 
      if sum([i, j, k]) == 0 and (i, j, k) != (0, 0, 0)] 
6

Помимо этой ошибки вместо тройной вложенной для-петли Вы можете также использовать itertools.product здесь, чтобы получить декартово произведение S * S * S:

from itertools import product 
result=[ x for x in product(S, repeat = 3) if sum(x)==0 and x != (0,0,0)] 

Демо:

>>> S = [1, -1, 0, 0] 
>>> [ x for x in product(S, repeat = 3) if sum(x) == 0 and x != (0,0,0)] 
[(1, -1, 0), (1, -1, 0), (1, 0, -1), (1, 0, -1), (-1, 1, 0), (-1, 1, 0), (-1, 0, 1), (-1, 0, 1), (0, 1, -1), (0, -1, 1), (0, 1, -1), (0, -1, 1)] 
+0

или 'product (S, S, S)' – Elazar

Смежные вопросы