2013-05-19 58 views
1

我生成的元組:的Python - 添加布爾條件使用到發電機

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不是正數的元組。

這個任務是否有專門的語法?例如:

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

謝謝!

回答

5

解讀非正以包括0,以便條件最終被

  1. X = Y
  2. X> = 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之間的數字(包含0),其餘數除以0和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 ] 
+2

每個數字被4整除使用濾波器被2整除,所以實際上沒有必要進行第一次測試,因爲你只是產生4的倍數。:P –

+0

@SukritKalra好點* faceplam *我會做一個更好的例子 – HennyH

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