6

私は以下を使用してタプルを生成しています:

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

ありがとう!

4

2 に答える 2

13

正でない数は 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)]

別の例: 2 と 3 の両方の除算の剰余が 0 に等しい、0 から 99 (両端を含む) までの数を選択します。

>>> [ 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 ]
于 2013-05-19T07:16:15.493 に答える
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))
于 2013-05-19T07:33:14.733 に答える