2次元リストで表データを操作する

1.記事の内容

 リスト構造のオブジェクトは、あらゆる型のオブジェクト(データ)を要素にすることができます。この記事では、リストオブジェクトを要素とするリスト、すなわち多次元リストについて説明します。

***わからない用語があるときは索引ページへ***

2.表データ:2次元リスト

 データを表形式で管理したいときは、2次元リストを利用することができます。サンプルプログラムでは、氏名、性別、連絡先メールアドレスを管理する名簿を取り上げてみましょう。
 ここで、「表形式のデータ(表データ)」とは、管理したい項目を列とし、各項目が記入された1セットのデータを行とするデータ構造のことをいいます。
---以下、補足---
2次元リストで特定のデータを指定するためには、下記サンプルプログラム"list_ex4.py"のように、
 <リストオブジェクト>[<インデックス1>][<インデックス2>]
と2つのインデックスで要素にアクセスします。数学で2次元平面の位置を、xとyの2つの軸の値で定めるのと同じです。
---

2.1.表データの作成とデータへのアクセス

 "list_ex4.py"は、リストオブジェクトの要素をリストオブジェクトとすることにより、表形式のデータを操作するサンプルプログラムです。
 リストデータの要素をリストデータとするように、データ構造の中に同じ型のデータ構造を埋め込むことを「ネストする」といいます。

##list_ex4.py

##名簿データを2次元リストで作成(表)
dim1 = [
    ["氏名", "性別","連絡先メールアドレス"],
    ["山田花子", "女性", "yamada_hanako@@example.jp"],
    ["鈴木太郎", "男性", "suzuki_taro@example.jp"],
    ["佐藤次郎", "男性", "sato_jiro@example.jp"]
]

##行(レコード)を取り出す
print("列名      :", dim1[0])
print("一人目の会員情報:", dim1[1])

##セルデータを取り出す
print("一人目の会員氏名:", dim1[1][0])

 実行結果の出力は以下のようになります。

列名      : ['氏名', '性別', '連絡先メールアドレス']
一人目の会員情報: ['山田花子', '女性', 'yamada_hanako@@example.jp']
一人目の会員氏名: 山田花子

 dim1[0]は、リストオブジェクトの最初の要素なので、リストオブジェクトである

['氏名', '性別', '連絡先メールアドレス']

となります。
 dim[1]はリストオブジェクトであり、dim[1][0]はリストオブジェクトであるdim[1]の最初の要素なので、

["山田花子", "女性", "yamada_hanako@@example.jp"]

の最初の要素である、「山田花子」となります。

 サンプルプログラム"list_ex4.py"は、変数を使って以下のように書くこともできます。出力結果は"list_ex4.pyと同じです。

##list_ex4.py

##名簿データを2次元リストで作成(表)
rec0 = ["氏名", "性別","連絡先メールアドレス"]
rec1 = ["山田花子", "女性", "yamada_hanako@@example.jp"]
rec2 = ["鈴木太郎", "男性", "suzuki_taro@example.jp"]
rec3 = ["佐藤次郎", "男性", "sato_jiro@example.jp"]

dim1 = [rec0, rec1, rec2, rec3]

##行(レコード)を取り出す
print("列名      :", dim1[0])
print("一人目の会員情報:", dim1[1])

##セルデータを取り出す
rec = dim[1]
print("一人目の会員氏名:", rec[0])

リストオブジェクトの要素を指定する
 <リストオブジェクト>[<インデックス>]
の形式は、変数と全く同じように扱うことができます。

cell = dim[1][0]

と、

rec = dim[1]
cell = rec[0]

は、同じことをしています。


2.2.リスト構造の発展 -多次元リスト

 pythonのlistオブジェクトは、あらゆる型のオブジェクトを要素とすることができ、かつ、1つのリストオブジェクトの中に異なる型のオブジェクトの要素を混在させることができます。
 したがって、pythonのlistオブジェクトでは、ネストをいくらでも深くすることができます。"list_ex4.py"では、表形式のサンプルを紹介しましたが、2次元に限らず、n次元のnはいくらでも深くできます。
 データへのアクセスは、

 <リストオブジェクト>[<インデックス>][<インデックス>]・・・

の形式で指定します。また、この形式は、ネストがいくら深くなっても"list_ex4.py"の説明同様、変数と全く同じように扱うことができます。

前の記事 次の記事



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