0

Python アルゴリズムを C# に変換していますが、説明が必要です。だから私はリストのこのリストを持っています:

offsets2 = [[(0.1, 0.1), (0.5, 0.1), (0.9, 0.1), (1.1, 0.1)],
            [(0.1, 0.5), (0.5, 0.5), (0.9, 0.5), (1.1, 0.5)],
            [(0.1, 0.9), (0.5, 0.9), (0.9, 0.9), (1.1, 0.9)],
            [(0.1, 1.0), (0.5, 1.0), (0.9, 1.0), (1.1, 1.0)]]

この:

for offset in offsets2:
    offset = [(int(x + lane.width * dx), 
               int(y + self.canvas.row_height * dy))
              for dx, dy in offset]

そして、私はdxとdyが何であるか疑問に思っていますか? 私はそれがデルタxとデルタyだと推測していますが、確認したいだけでなく、c#でそれらを取得する方法も尋ねています。

4

3 に答える 3

1

あなたはあなたが欲しいものを見つけるためにprintステートメントを置くことができます。

for offset in offsets2:
    print offset
    tmp = []
    for dx, dy in offset:# for each pair (dx,dy) of offset
        print dx, dy
        newCoords = (int(x + lane.width * dx), 
               int(y + self.canvas.row_height * dy))
        tmp.append(newCoords)
    offset = tmp[:]

>>> [(0.1, 0.1), (0.5, 0.1), (0.9, 0.1), (1.1, 0.1)]
>>> 0.1, 0.1
>>> 0.5, 0.1
>>> 0.9, 0.1
....
>>> [(0.1, 0.5), (0.5, 0.5), (0.9, 0.5), (1.1, 0.5)]
>>> 0.1, 0.5
>>> 0.5, 0.5
>>> 0.9, 0.5
于 2013-03-04T09:52:32.457 に答える
1

コードは、いわゆるList Comprehension.

大まかに訳すと次のようになります。

for offset in offsets2:
    _tmp = []
    for dx, dy in offset:
        _tmp.append((int(x + lane.width * dx), 
                     int(y + self.canvas.row_height * dy))
    offset = _tmp

offsetは 2 タプルが含まれており、式はfor dx, dy in offset反復処理中にそれらをアンパックします。それは書くことと同じです:

for coord in offset:
    if len(coord) != 2:
        raise ValueError
    dx = coord[0]
    dy = coord[1]
    ...
于 2013-03-04T09:56:15.470 に答える
0

dxおよびdyは、リスト内の値の各セットに割り当てられる一時変数です。したがって、最初の反復では、、dx=0.1, dy=0.12番目の反復では、、というdx=0.5, dy=0.1ように続きます。

于 2013-03-04T09:52:19.253 に答える