2017-03-21 1 views
-4
inp[0][0] = shadow[3][0] 
inp[0][3] = shadow[0][0] 
inp[3][3] = shadow[0][3] 
inp[3][0] = shadow[3][3] 

このコードをforループにしたいのは、このコードが嫌だからです!私はしかし、どのように把握することはできません。このリストをforループにする方法

+1

我々はマップする必要があるかについての詳細を必要としています。なぜ[0] [3]は[0] [0]から割り当てられますか? – languitar

+0

あなたの質問にいくつかの詳細を追加してください。 inp [0] = shadow [0] [0]ではないinp [0] = shadow [3] [0]を選択する理由を説明してください。 – Ashish

答えて

0

基本的には、(0, 0), (0, 3), (3, 3), (3, 0)シリーズから、2つの座標セットをリング形式でピッキングしています。あなたは第二の点に使用するインデックスとそのシリーズの上に反復して行うことができます。

points = [(0, 0), (0, 3), (3, 3), (3, 0)] 
for index, (x, y) in enumerate(points, -1): 
    shadow_x, shadow_y = points[index] 
    inp[x][y] = shadow[shadow_x][shadow_y] 

-1enumerate() function出発点を与えることによって、我々が作成pointsで右のマッチング点を見つけることを相殺しました。

はまた、使用することができzip() function:あなたが最良のあなたのユースケースに合う感じ方

points = [(0, 0), (0, 3), (3, 3), (3, 0)] 
for (x, y), (shadow_x, shadow_y) in zip(points, [points[-1]] + points): 
    inp[x][y] = shadow[shadow_x][shadow_y] 

ピック。 (実行される内容を示すためにprint()文を使用して、実際の割り当てを置き換える)

デモ:

>>> points = [(0, 0), (0, 3), (3, 3), (3, 0)] 
>>> for index, (x, y) in enumerate(points, -1): 
...  shadow_x, shadow_y = points[index] 
...  print(f"inp[{x}][{y}] = shadow[{shadow_x}][{shadow_y}]") 
... 
inp[0][0] = shadow[3][0] 
inp[0][3] = shadow[0][0] 
inp[3][3] = shadow[0][3] 
inp[3][0] = shadow[3][3] 
>>> for (x, y), (shadow_x, shadow_y) in zip(points, [points[-1]] + points): 
...  print(f"inp[{x}][{y}] = shadow[{shadow_x}][{shadow_y}]") 
... 
inp[0][0] = shadow[3][0] 
inp[0][3] = shadow[0][0] 
inp[3][3] = shadow[0][3] 
inp[3][0] = shadow[3][3] 
関連する問題