我正在使用以下方法生成元组:
Z = 1
W = 5
[(x,y) for x in range(Z-2,Z+2)for y in range(W-2,W+2)]
我想在这个生成器中加入一些布尔条件,例如:
- 不要包括 x 等于 y 的元组。
- 不要包含 x 为非正数的元组。
这个任务有专门的语法吗?就像是 :
[(x,y) for x in range(Z-2,Z+2)for y in range(W-2,W+2) where (x!=y) and (x>0)]
谢谢!
我将非正数解释为包括 0 所以条件最终是
于是理解就变成了:
>>> [(x,y) for x in range(Z-2,Z+2) for y in range(W-2,W+2) if x != y and x >= 0]
[(0, 3), (0, 4), (0, 5), (0, 6), (1, 3), (1, 4), (1, 5), (1, 6), (2, 3), (2, 4), (2, 5), (2, 6)]
另一个例子:选择 0 到 99(含)之间的数,其中 2 和 3 的除法余数都等于 0。
>>> [ i for i in range(100) if (i%2==0) and (i%3==0)]
[0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96]
通常,您可以将语法描述为
[ result for variables in iterable if condition ]
您可以在生成器上使用过滤器
filter (lambda i:i[0]!=i[1] and i[0]>0, ((x,y) for x in range(Z-2,Z+2)for y in range(W-2,W+2))