4-5. Pythonの多重リスト・ネストしたリスト


多重リストはデータ分析や機械学習の分野ではよく使われるものの、一般的なシステムにおいてはあまり使われません。
不要と判断したら、飛ばして次のページへ進みましょう。


1. 多重リスト(ネストしたリスト)とは?

多重リストとは、リストの要素がリストであるものです。
入れ子構造になっています。
Pythonのリストについてはこちらのページで解説しています。
▶︎ Python リスト型 (list) について

例えば、1学年の生徒名の変数を作る場合、クラスごとの生徒名のリストを作り、それを1組〜N組までのリストとしてまとめて多重リストを作ります。

Python_多重リスト_イメージ

リストの中のリスト (この場合、1クラスの生徒名のリスト) の要素数は同じでなくても問題ありません。

さらに、3重のリスト構造、4重のリスト構造…を入れ子を深くしていくこともできます。

2. 多重リストの作り方

多重リストは以下のように、リストの中にリストを定義していくことで作成ができます。

  • 多重リスト(2重)の作り方 : [[<値1-1>, <値1-2>, <値1-3>], [<値2-1>, <値2-2>, <値2-3>], ....]
x = [[1, 2, 3, 4], ['a', 'b', 'c'], ['あ', 'い', 'う', 'え', 'お']]
print(x)
>> [[1, 2, 3, 4], ['a', 'b', 'c'], ['あ', 'い', 'う', 'え', 'お']]

# リストを作ってから定義する
x_1 = [1, 2, 3, 4]
x_2 = ['a', 'b', 'c']
x_3 = ['あ', 'い', 'う', 'え', 'お']
x_all = [x_1, x_2, x_3]

print(x_123)
>> [[1, 2, 3, 4], ['a', 'b', 'c'], ['あ', 'い', 'う', 'え', 'お']]

空リストの多重リストも作れます。

x = [[], [], []]

print(x)
>> [[], [], []] 
print(len(x))
>> 3

3. 多重リストの要素をインデックスを指定して取得する

多重リストの要素をインデックス指定で取得するには、通常のリストと同じく [] 括弧を使います。

  • 外のリストの要素(リスト)を取得 : <多重リスト>[<外リストのインデックス>]
  • 中のリストの要素を取得: <多重リスト>[外リストのインデックス][中リストのインデックス]

例えば、1つ目のリスト(インデックス0)の中のインデックス5の要素を取得しようと思った場合、x[0][5] です。
3つ目のリスト(インデックス2)の中のインデックス3の要素を取得しようと思った場合、x[2][3] です。

Python_多重リストのアクセスイメージ図

x = [[1, 2, 3, 4], ['a', 'b', 'c'], ['あ', 'い', 'う', 'え', 'お']]

# 1つ目のリスト
print(x[0])
>> [1, 2, 3, 4]

# 1つ目のリストのインデックス0の要素
print(x[0][0])
>> 1

# 2つ目のリスト
print(x[1])
>> ['a', 'b', 'c']

# 1つ目のリストのインデックス2の要素
print(x[1][2])
>> c

4. 多重リストの要素をインデックス指定で更新する

通常のリストと同様に、要素を更新する場合は該当の要素のインデックスを [] で指定して代入します。

  • 外リストの要素(リスト)をインデックス指定で更新 : <多重リスト>[<インデックス>] = <リスト>
  • 中のリストの要素をインデックス指定で更新 : <多重リスト>[外リストのインデックス][中リストのインデックス] = <値>
x = [[1, 2, 3, 4], ['a', 'b', 'c'], ['あ', 'い', 'う', 'え', 'お']]

# 1つめのリストを更新
x[0] = [0, 0, 0, 0, 0, 0]
print(x)
>> [[0, 0, 0, 0, 0, 0], ['a', 'b', 'c'], ['あ', 'い', 'う', 'え', 'お']]

# 2つめのリストのインデックス1の要素を更新
x[1][1] = 'zzzzzzz'
print(x)
>> [[0, 0, 0, 0, 0, 0], ['a', 'zzzzzzz', 'c'], ['あ', 'い', 'う', 'え', 'お']]


5. 多重リストに対する操作

基本的に多重リストに対しても、リストと同様の書き方で操作ができます。
詳しい書き方については、以前のリストのページをみてください。
▶︎ Python リスト型 (list)の解説ページ

  • append() : 末尾に要素を追加
  • pop() : インデックス指定で要素を削除
  • remove() : 値を指定して要素を削除
  • insert() : インデックスを指定して要素を挿入
  • extend() : リストの末尾にリストを結合する
  • + : リストとリストを結合して新しいリストを作る

これ以外にも、特定の値の要素の存在を調べる in や 順番を並び替える sort 、分割するための : セミコロンも使うことができます。

サンプルコード

"""
多重リスト append のサンプルコード
"""
x = [[1, 2, 3, 4], ['a', 'b', 'c'], ['あ', 'い', 'う']]

# 外リストの末尾に要素を追加
x.append([0.1, 0.2])
print(x)
>> [[1, 2, 3, 4], ['a', 'b', 'c'], ['あ', 'い', 'う'], [0.1, 0.2]]

# 2つめのリストの末尾に要素を追加
x[1].append('AAA')
>> [[1, 2, 3, 4], ['a', 'b', 'c', 'AAA'], ['あ', 'い', 'う'], [0.1, 0.2]]

"""
多重リスト pop のサンプルコード
"""
x = [[1, 2, 3, 4], ['a', 'b', 'c'], ['あ', 'い', 'う']]
# 外リストの1つめの要素(リスト)を削除
x.pop(0)
print(x)
>> [['a', 'b', 'c'], ['あ', 'い', 'う']]

x = [[1, 2, 3, 4], ['a', 'b', 'c'], ['あ', 'い', 'う']]
# 2つめのリストのインデックス2の要素を削除
x[1].pop(2)
print(x)
>> [[1, 2, 3, 4], ['a', 'b'], ['あ', 'い', 'う']]

"""
多重リスト remove のサンプルコード
"""
x = [[1, 2, 3, 4], ['a', 'b', 'c'], ['あ', 'い', 'う']]
# 外の要素(リスト)の['あ', 'い', 'う']を削除
x.remove(['あ', 'い', 'う'])
print(x)
>> [[1, 2, 3, 4], ['a', 'b', 'c']]

x = [[1, 2, 3, 4], ['a', 'b', 'c'], ['あ', 'い', 'う']]
# 1つめのリストの要素 3 を削除
x[0].remove(3)
print(x)
>> [[1, 2, 4], ['a', 'b', 'c'], ['あ', 'い', 'う']]

"""
多重リスト insert のサンプルコード
"""
x = [[1, 2, 3, 4], ['a', 'b', 'c'], ['あ', 'い', 'う']]
# 外の要素(リスト)のインデックス0に挿入
x.insert(0, [111, 222, 333])
print(x)
>> [[111, 222, 333], [1, 2, 3, 4], ['a', 'b', 'c'], ['あ', 'い', 'う']]

x = [[1, 2, 3, 4], ['a', 'b', 'c'], ['あ', 'い', 'う']]
# 2つめのリストの要素のインデックス1に挿入
x[1].insert(1, 'ZZZZ')
print(x)
>> [[1, 2, 3, 4], ['a', 'ZZZZ', 'b', 'c'], ['あ', 'い', 'う']]

"""
多重リスト extend のサンプルコード
"""

x = [[1, 2, 3, 4], ['a', 'b', 'c'], ['あ', 'い', 'う']]
# 外のリストに多重リストを結合
x.extend([[111, 222, 333], [0, 0, 0]])
print(x)
>> [[1, 2, 3, 4], ['a', 'b', 'c'], ['あ', 'い', 'う'], [111, 222, 333], [0, 0, 0]]

x = [[1, 2, 3, 4], ['a', 'b', 'c'], ['あ', 'い', 'う']]
# 1つめのリストにリストを結合
x[0].extend([0.1, 0.2])
print(x)
>> [[1, 2, 3, 4, 0.1, 0.2], ['a', 'b', 'c'], ['あ', 'い', 'う']]



6. 参考 Python公式 ドキュメント


このエントリーをはてなブックマークに追加