2024-03-28 18:46:14 发布
网友
我有一个清单内的表达理解:
[(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包括在结果中。在
要仅在所有为零时省略(i,j,k),请使用条件(i,j,k) != (0,0,0):
(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)
印刷品
要了解原始条件的问题,(i!=0) and (j!=0) and (k!=0):
(i!=0) and (j!=0) and (k!=0)
考虑一下i=0和j=1时会发生什么:
i=0
j=1
(i!=0) and (j!=0)是False,因为False and True是{}。 相反,(i,j) != (0,0)总是True,除非i和{}都为零。在
(i!=0) and (j!=0)
False
False and True
(i,j) != (0,0)
True
i
添加(k!=0)会使示例更加复杂,但其思想是相同的。在
(k!=0)
使用itertools可以大大简化这一过程。。。在
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]
要仅在所有为零时省略
(i,j,k)
,请使用条件(i,j,k) != (0,0,0)
:印刷品
^{pr2}$要了解原始条件的问题,
(i!=0) and (j!=0) and (k!=0)
:考虑一下
^{3}$i=0
和j=1
时会发生什么:(i!=0) and (j!=0)
是False
,因为False and True
是{(i,j) != (0,0)
总是True
,除非i
和{添加
(k!=0)
会使示例更加复杂,但其思想是相同的。在使用
itertools
可以大大简化这一过程。。。在这要简单得多。。。(如果这是你想做的事!)在
如果您仍然需要一行代码,那么以下内容实际上是可读的:
相关问题 更多 >
编程相关推荐