Python 配列のスライシング #6

株式会社リュディアです。引き続き Python の配列のスライシングについてまとめていきたいと思います。

前回までの Python 配列のスライシング のまとめへのリンクは以下を参考にしてください。

今回は2次元配列のスライシングです。早速以下の例を見てください。

python_list = [['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h'], ['i', 'j', 'k', 'l']]

print(python_list)

#
# [['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h'], ['i', 'j', 'k', 'l']]
#

4要素のリストを3つ持つ2次元のリストです。図のイメージは以下のようになります。

画像1

図からもわかるように、4要素のリストへのアクセスは容易です。以下のように行います。

python_list = [['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h'], ['i', 'j', 'k', 'l']]

print(python_list[0])
print(python_list[1])
print(python_list[2])

#
# ['a', 'b', 'c', 'd']
# ['e', 'f', 'g', 'h']
# ['i', 'j', 'k', 'l']
#

図の中で横歩行で示している [a, b, c, d], [e, f, g, h], [i, j, k, l] はそれぞれ python_list[0], [1], [2] でスライシング可能です。まとめての表示もしてみましょう。

python_list = [['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h'], ['i', 'j', 'k', 'l']]

print(python_list[0:2])

#
# [['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h']]
#

[0 : 2] とすることで python_list[0] と python_list[1] を表示していますね。次に縦方向のリストへのアクセスを考えてみましょう。

これは転置してから行方向のアクセスをするしか方法がありません。Python標準ライブラリの zip を使って転置を行い行方向へのアクセスを行ってみます。以下の例を見てください。

python_list = [['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h'], ['i', 'j', 'k', 'l']]

python_list_t = [list(x) for x in zip(*python_list)]

print(python_list_t)

print(python_list_t[0:2])

#
# [['a', 'e', 'i'], ['b', 'f', 'j'], ['c', 'g', 'k'], ['d', 'h', 'l']]
#
# [['a', 'e', 'i'], ['b', 'f', 'j']]
#

これで元の2次元配列での列方向へのアクセスができましたね。

Python 標準であるリストやタプルを使って2次元配列の複雑なスライシングを行うことは現実的ではありません。そこで NumPy を導入することで問題が解決されたわけです。次回からは NumPy を使って 2次元配列のスライシングを行ってみます。

では、ごきげんよう。





この記事が気に入ったらサポートをしてみませんか?