
listは、1つの変数に複数の値を保存することがでる構造体です。
Table of Contents(目次)
listの初期化
まずは、最小限のlistの初期化を行ってみましょう。次のようにコードを記述します。
num_list = []
変数名と角カッコ[]
をイコールで結びます。これが、要素数0のlistです。
listは必ずしも要素を持っている必要はなく、要素数0のlistで初期化した後で、append()
メソッドや+
演算子を使用して要素を追加することができます。(要素を追加する方法は、専用のレクチャーで詳しく解説します。)
listは、要素を1つ以上持つことができます。次のように、listの初期化を行うことができます。
numbers = [1, 2, 3, 4, 5]
primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
alphabets = ['a', 'b', 'c', 'd', 'e']
cities = ['Tokyo', 'New York', 'Paris', 'Rio de Janeiro', 'Cairo']
上記コードは、listの初期化を行っています: (1)整数のlist、(2)素数(primes)のlist、(3)アルファベットのlist、(4)都市名のlist。listの各要素は、カンマ(,
)で区切りながら記述します。
基本的にlistは、『数値だけのlist』『文字列だけのlist』のように、1つのlistに1種類のデータ型を持たせるのが分かりやすくて管理もしやすいのですが、次のコードのように異なったデータ型を1つのlistに持たせることができます。
mixed = [1, 'two', 3.0, [4]]
上記コードのlistには、int, string, float, listのデータ型が含まれています。このように、Pythonのlistは複数の種類のデータを簡単に管理することができます。
listの要素の取り出し
listの要素は、文字列と同じように[n]
のように記述します。先ほどの"mixed"変数の要素を取り出してみましょう。
mixed = [1, 'two', 3.0, [4]]
print(mixed[0]) # 1
print(mixed[1]) # 'two'
print(mixed[2]) # 3.0
print(mixed[3]) # [4]
上記コードのように、インデックスを使って要素を1つずつ取り出すことができます。
(listのスライスについては、専用のレクチャーで解説します。)
listの要素数 (len()関数)
listの要素数を確認するには、len()
関数を使用します。
mixed = [1, 'two', 3.0, [4]]
print(len(mixed)) # 4
2次元list
Pythonのlistは、要素としてlistを含めることができます。listのような構造体の中に、更に構造体を組み込むことをネストと言います。(『入れ子』や『再帰的に繰り返されて記述される構造』のことを言います。)
listの要素にlistをネストさせたデータは、縦と横のデータのようにデータを扱うことができるようになるため、2次元listと呼ばれます。ネストは幾つでも深くすることができます。
他のプログラミング言語の中には、listのような構造体のことを"配列"と呼んでいるものもあります。そのため、Pythonプログラマーであっても、ネストしたlistのことを"2次元配列"と言う方もいらっしゃいます。これは、同じものを指してると思って問題ないです。
2次元listの初期化は次のようになります。
multiplication_table = [[0, 0, 0, 0, 0], [0, 1, 2, 3, 4, 5], [0, 2, 4, 6, 8, 10], [0, 3, 6, 9, 12, 15], [0, 4, 8, 12, 16, 20], [0, 5, 10, 15, 20, 25]]
もし、要素数が多くなり、コードが見えにくくなる場合は、次のコードのように要素を改行しながら記述することができます。
multiplication_table = [
[0, 0, 0, 0, 0],
[0, 1, 2, 3, 4, 5],
[0, 2, 4, 6, 8, 10],
[0, 3, 6, 9, 12, 15],
[0, 4, 8, 12, 16, 20],
[0, 5, 10, 15, 20, 25]
]
上記のように、要素を改行しながら記述する時、インデント(プログラムの行頭に空白を挿入して字下げすること)を組み合わせて記述すると、よりコードが見やすくなります。
Pythonは、基本的にインデントせずにコードを記述します。インデントしてはいけない所で、行頭に空白が含まれているとエラーになります。
しかし、Pythonの書式のルール上、インデントが必須の場合や、今回のようにコードを見やすくするために許可されているケースがあります。
インデントが必須なケースとは、条件分岐(if
)や繰り返し処理(for
/while
)を行う時や、関数の中身を記述する時などが該当します。これらは専用のレクチャーで解説しますので、その時に覚えれば大丈夫です。
コードを見やすくするために許可されているケースについては、Python101の講義の中で触れていきますので、その都度覚えていきましょう。
先ほど初期化した2次元listは、『5x5の掛け算表』になっています。試しに、『2x3』『4x5』の結果を出力してみたいと思います。
multiplication_table = [
[0, 0, 0, 0, 0],
[0, 1, 2, 3, 4, 5],
[0, 2, 4, 6, 8, 10],
[0, 3, 6, 9, 12, 15],
[0, 4, 8, 12, 16, 20],
[0, 5, 10, 15, 20, 25]
]
answer_2x3 = multiplication_table[2][3]
answer_4x5 = multiplication_table[4][5]
print(f'2x3={answer_2x3}, 4x5={answer_4x5}')
上記コードを実行すると、"2x3=6, 4x5=20"という結果を得ることができます。2次元listの要素を取り出すには、[n][m]
のように記述します。
"2x3"を例にすると、まずmultiplication_table[2]
で、要素番号[2]の[0, 2, 4, 6, 8, 10]
のlistを取り出すことができます。先ほど取り出した[0, 2, 4, 6, 8, 10]
の中の要素番号[3]を指定することで目的の"6"を取り出すことができます。ですので、[2]と[3]を繋げて記述することで(multiplication_table[2][3]
)、"2x3"の結果の"6"を得ることができます。

listの使用例
listの使用例として、glob関数を紹介します。glob関数は、あるディレクトリ内に存在するフォルダやファイルのlistを返してくれる関数です。今回は、WindowsのCドライブ直下に存在するフォルダ/ファイルのlistを取得するための、シンプルなコードを実行してみます。
import glob
c_drive_list = glob.glob('c:/*')
print(c_drive_list)
上記コードを実行すると、下記のような結果が返ってきたかと思います。(皆さんのCドライブの環境によって結果が変わります。多くのデータが返されるので、一部データは"..."表記に書き換えてあります。)
['c:/Documents and Settings',... 'c:/Program Files', 'c:/Program Files (x86)',... 'c:/ProgramData',... 'c:/Users', 'c:/Windows']
このように、多くのデータを返すような場合にlistが使用されます。(コード詳しい解説は、専用のレクチャーで行いますので、ここではどのような結果が返されたかに注目してください。)
補足ですが、上記のように大量の要素が含まれたlistを表示する際にprint出力すると、1行が長くなって見にくくなるケースがあります。その場合はpprint関数を使うと要素ごとに改行して出力してくれるので、分かりやすくなります。
import glob
from pprint import pprint
c_drive_list = glob.glob('c:/*')
pprint(c_drive_list)
pprintで出力した結果は次のようになります。各要素が改行されて出力されるので、どのようなディレクトリ(フォルダ/ファイル)がCドライブの中に存在しているのかが分かりやすくなりました。
['c:/Documents and Settings',
.....
'c:/Program Files',
'c:/Program Files (x86)',
'c:/ProgramData',
.....
'c:/Users',
'c:/Windows']
pprintとは"pretty-print"の略で、listの要素などの情報を整形して出力してくれる関数です。
使い方ですが、from pprint import pprint
行の後でpprint
関数を実行します。次のような形式で記述することで使用することができます。(variable
は変数のことです。)
from pprint import pprint
pprint(variable)
1行目のfrom pprint import pprint
については、このまま覚えてしまいましょう。詳しくは"モジュール"のレクチャーで詳しく解説するのですが、現時点では『Pythonに対してpprint関数を使うための宣言をしている』と覚えておけば大丈夫です。