質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

解決済

1回答

11275閲覧

XY座標の点の状態を表現するときの良い方法について

evans

総合スコア48

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

1グッド

0クリップ

投稿2016/09/11 12:57

###前提・実現したいこと
XY座標の点の状態を表現するときの良い方法が知りたいです。

例として、右向きにX軸、下向きにY軸が伸びる以下のような
図があるとします。
||||
|::||::||::||::|
|a|b|c|
|d|e|f|

XY座標と対応する位置は以下の通りとなります。
(1, 1) -> a
(2, 1) -> b
(3, 2) -> f

上記のようなデータ構造を表現したいのですが、2次元配列を使うと以下の二つの問題があり、
直観的でなくなってしまいます。
・X Yが配列の添え字では逆になってしまう ※1
・1ではなく0から始まる

※1について

python

1>>> arr = [["a", "b", "c"], ["d", "e", "f"]] 2>>> arr[1][0] 3'd'

x, y=1, 0のbが取れることを期待しているのに、
結果はdになってしまいます。

X,Y座標ごとの各点の状態を表現するための良い方法はないでしょうか?

###試したこと

苦し紛れに考えたのは以下のようなクラスを作ってそこでデータを保持することです。

python

1class My2DAry(object): 2 def __init__(self, ary): 3 self._ary = ary 4 5 def get(self, x, y): 6 return self._ary[y-1][x-1] 7 8 def set(self, x, y, value): 9 self._ary[y-1][x-1] = value
ikuwow👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

X Yが配列の添え字では逆になってしまう
1ではなく0から始まる

python

1arr = [["a", "d",], ["b", "e"], ["c", "f"]] 2print arr[1][0]

第一段階として、並び方を変えます。

python

1arr = [["x", "x", "x"], ["x", "a", "d",], ["x", "b", "e"], ["x", "c", "f"]] 2print arr[2][1]

第二段階として、使わない部分に何でもいいですが、
使わない意味の印(x)を入れて位置をずらします。

これで、X, Y = 2, 1 で bが取れます。

ただ、「配列初期化の並びが直感的でない」と感じられるかもしれません。
クラスやメソッドで変換するかどうかは好みしだいですね。
(こちらの方がムダな処理が入らないので、パフォーマンスは微妙にいいですが)

投稿2016/09/11 17:01

編集2016/09/11 17:04
LLman

総合スコア5592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

evans

2016/09/15 12:17

ご回答ありがとうございます。 簡単に解決できるライブラリがあればよかったのですが、そうもいかないみたいですね。 用途に応じて検討してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問