【Python】現在の座標をzipで更新する

はじめに

二次元配列の座標空間で、現在地からある量だけ移動するというプログラムを作成した。

from pprint import pprint

two_d_list = [
                [1, 2, 3], 
                [4, 5, 6], 
                [7, 8, 9]
            ]
pprint(two_d_list, width=20)

my_position = (2, 2) # (row, column)
print(two_d_list[my_position[0]][my_position[1]])

move_direction = (0, -1) # (row_change, column_change)
my_moved_position = tuple(x + y for x, y in zip(my_position, move_direction))
print(two_d_list[my_moved_position[0]][my_moved_position[1]])

【Python】現在の座標をzipで更新する · ki-hi-ro/python@ed863a1

二次元配列の座標空間

two_d_listという二次元配列を作成した。出力を見やすくするために、pprintモジュールのpprintメソッドを使用している。

from pprint import pprint

two_d_list = [
                [1, 2, 3], 
                [4, 5, 6], 
                [7, 8, 9]
            ]
pprint(two_d_list, width=20)

my_position = (2, 2) # (row, column)
print(two_d_list[my_position[0]][my_position[1]])

move_direction = (0, -1) # (row_change, column_change)
my_moved_position = tuple(x + y for x, y in zip(my_position, move_direction))
print(two_d_list[my_moved_position[0]][my_moved_position[1]])

出力結果。

[[1, 2, 3],
 [4, 5, 6],
 [7, 8, 9]]
9
8

現在地

my_positionをタプルで表現した。my_position[0]でタプルの最初の要素が取り出せる。my_position[1]でタプルの次の要素が取り出せるので、それをtwo_d_listから値を取り出すのに使用した。

from pprint import pprint

two_d_list = [
                [1, 2, 3], 
                [4, 5, 6], 
                [7, 8, 9]
            ]
pprint(two_d_list, width=20)

my_position = (2, 2) # (row, column)
print(two_d_list[my_position[0]][my_position[1]])

move_direction = (0, -1) # (row_change, column_change)
my_moved_position = tuple(x + y for x, y in zip(my_position, move_direction))
print(two_d_list[my_moved_position[0]][my_moved_position[1]])

出力結果。

9

移動する量

move_directionで、移動する量を表現している。行は0で変化なし、列は-1なので、左に行く。

from pprint import pprint

two_d_list = [
                [1, 2, 3], 
                [4, 5, 6], 
                [7, 8, 9]
            ]
pprint(two_d_list, width=20)

my_position = (2, 2) # (row, column)
print(two_d_list[my_position[0]][my_position[1]])

move_direction = (0, -1) # (row_change, column_change)
my_moved_position = tuple(x + y for x, y in zip(my_position, move_direction))
print(two_d_list[my_moved_position[0]][my_moved_position[1]])

移動後の位置を計算する

zip(my_position, move_direction)で、[(2, 0), (2, -1)]というような元の要素のペアができる。for x, y in zip(my_position, move_direction)なので、x=2, y=0、x=2, y=-1という形で、処理が進む。x + yという処理。全体がtupleで囲まれているので、(2+0, 2-1)となる。

from pprint import pprint

two_d_list = [
                [1, 2, 3], 
                [4, 5, 6], 
                [7, 8, 9]
            ]
pprint(two_d_list, width=20)

my_position = (2, 2) # (row, column)
print(two_d_list[my_position[0]][my_position[1]])

move_direction = (0, -1) # (row_change, column_change)
my_moved_position = tuple(x + y for x, y in zip(my_position, move_direction))
print(two_d_list[my_moved_position[0]][my_moved_position[1]])

my_moved_positionの中身。

my_moved_position
(2, 1)

移動後の位置の数字を出力する

from pprint import pprint

two_d_list = [
                [1, 2, 3], 
                [4, 5, 6], 
                [7, 8, 9]
            ]
pprint(two_d_list, width=20)

my_position = (2, 2) # (row, column)
print(two_d_list[my_position[0]][my_position[1]])

move_direction = (0, -1) # (row_change, column_change)
my_moved_position = tuple(x + y for x, y in zip(my_position, move_direction))
print(two_d_list[my_moved_position[0]][my_moved_position[1]])

出力結果。

8

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です