列表理解python中的复杂if表达式

2024-03-28 18:46:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个清单内的表达理解:

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

但它似乎不是在我的条件之间,而是作为或。为什么会这样?在

问题是当i,j和k中的一个为0时,元组没有被添加,这不是我想要的。我只想在它们都为0时发射。一、 e:我想把0,3,-3包括在结果中。在


Tags: andinforif条件元组
3条回答

要仅在所有为零时省略(i,j,k),请使用条件(i,j,k) != (0,0,0)

S = range(-3,3)
x = [(i,j,k)
     for i in S
     for j in S
     for k in S
     if ((i+j+k==0)
         and (i,j,k) != (0,0,0))]
print(x)

印刷品

^{pr2}$

要了解原始条件的问题,(i!=0) and (j!=0) and (k!=0)

考虑一下i=0j=1时会发生什么:

^{3}$

(i!=0) and (j!=0)False,因为False and True是{}。 相反,(i,j) != (0,0)总是True,除非i和{}都为零。在

添加(k!=0)会使示例更加复杂,但其思想是相同的。在

使用itertools可以大大简化这一过程。。。在

from itertools import combinations_with_replacement as icwr

S = [t for t in icwr(range(-3,3),3) if t != (0,0,0)]

print S

这要简单得多。。。(如果这是你想做的事!)在

如果您仍然需要一行代码,那么以下内容实际上是可读的:

[i for i in itertools.product(range(-3, 3), repeat=3) 
 if any(i) and sum(i) == 0]

相关问题 更多 >