Python - 为生成器添加布尔条件

时间:2013-05-19 07:13:24

标签: python generator

我正在使用:

生成元组
Z = 1
W = 5
[(x,y) for x in range(Z-2,Z+2)for y in range(W-2,W+2)]

我想在这个生成器中加入一些布尔条件,例如:

  1. 不要包含x等于y的元组。
  2. 不要包含x为非正数的元组。
  3. 此任务是否有专用语法?类似的东西:

    [(x,y) for x in range(Z-2,Z+2)for y in range(W-2,W+2) where (x!=y) and (x>0)]
    

    谢谢!

2 个答案:

答案 0 :(得分:6)

我将非正数解释为包含0,因此条件最终为

  1. x!= y
  2. x> = 0
  3. 理解就变成了:

    >>> [(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 ]
    

答案 1 :(得分:0)

你可以在发电机上使用过滤器

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))