sec02 - list(リスト)の概要

listは、1つの変数に複数の値を保存することがでる構造体です。

スポンサーリンク

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と配列

他のプログラミング言語の中には、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関数

pprintとは"pretty-print"の略で、listの要素などの情報を整形して出力してくれる関数です。

使い方ですが、from pprint import pprint行の後でpprint関数を実行します。次のような形式で記述することで使用することができます。(variableは変数のことです。)

from pprint import pprint
pprint(variable)

1行目のfrom pprint import pprintについては、このまま覚えてしまいましょう。詳しくは"モジュール"のレクチャーで詳しく解説するのですが、現時点では『Pythonに対してpprint関数を使うための宣言をしている』と覚えておけば大丈夫です。

スポンサーリンク