list(リスト)型の基本と初期化

それではここからはシーケンスのひとつ、リストについて学習をしましょう。

listとは

前回の冒頭で軽く説明しましたが、list型とはシーケンスの一種で順序付けられた複数の値をひとまとまりの変数として扱うことができます。また、for文といった制御文を使用すると、格納した複数の値を順番に処理することが可能になります。なお、以降list型の変数のことを単にリストと記述する場合があります。

また、リストは生成後に後から要素の値を変えたり、値を挿入したり、値をソートしたりといった様々な機能が予め用意されています。このため、覚えることが多い反面、使いこなせるようになると様々な場面で活用することができます。

listの初期化

[]を使用した初期化

さっそく実際にlistを使ってみましょう。まずはlist型の変数を初期化、生成します。list型の変数を生成する場合は、大カッコの中に、カンマ区切りで値を列挙して初期値を定義することができます。

初期化
変数 = [要素1, 要素2, , ,]

大カッコの中に何も書かない場合は、空のリストが生成されます。サンプルを見てみましょう。

# 数値のリスト
l1 = [1, 3, 5, 7, 9]

# 文字列のリスト。重複してもOK
l2 = ['pen', 'pineapple', 'apple', 'pen']

# 型の異なる変数も入れられる
l3 = [1, 'pen', l1, l2] 

# 空のリスト
l4 = []

l1は数値のリストです。l2は文字列のリストです。重複がある値も挿入することが可能です。そして、l3では、数値、文字に加え、リスト型オブジェクも挿入しています。そう、Pythonのリストには何でも挿入できてしまいます。
最後のl4では空のリストを生成しています。

list関数による初期化

また、初期化でもう一つ重要なのがlist関数と呼ばれる組み込みの関数を使用する方法です。引数にシーケンスを指定すると、その要素と同じリストが生成されます。リストをコピーする際に使用することができます。

サンプルを見てみましょう。

l1 = [1, 2, 3]
l2 = list(l1)

上のサンプルではリストl1と同じ内容のリストl2が生成されています。

補足

また、listの初期化にはリスト内包表記と呼ばれる非常に強力な記法がPythonには用意されています。制御文のforについて学習した後説明します。リスト内包表記

リストの要素を取得する

インデックスの指定

次にリストの要素にアクセスしてみましょう。識別子の後に大カッコでインデックスを指定する方法が最も簡単です。サンプルで確認してみましょう。

l = [1, 2, 3, 4, 5]

print(l[0]) # 1
print(l[1]) # 2
print(l[4]) # 5
print(l[5]) # IndexError: list index out of range

0を指定すると、0番目の要素が取得できます。また、リストの範囲を超えたインデックスを指定すると、IndexErrorが発生します。

listの最後の要素を取得する

Pythonのリストはlistの最後の要素を取得するには-1を指定します。さらに、マイナスのインデックスで末尾から指定することもできます。

l = [1, 2, 3, 4, 5]

print(l[-1]) # 5
print(l[-4]) # 2
print(l[-5]) # 1
print(l[-6]) # IndexError: list index out of range

スライス構文

マイナスのインデックスに加え、Pythonのリストで重要な構文がスライス構文です。リストに対し範囲を指定してアクセスすることができます。

スライス構文は開始インデックスと終了インデックスをコロンでつなげて指定します。開始インデックスを省略すると、開始インデックスは0になります。終了インデックスを省略すると、終了インデックスは-1(最後尾)になります。終了インデックスで指定した値は結果に含まれないので注意してください。また、範囲を超えたインデックスを指定しても、IndexErrorは発生しません。

サンプルで確認してみましょう。

# リストの初期化
l = ['a', 'b', 'c', 'd', 'e']

# 0番目から0番目(1番目は取得されない)
print(l[0:1]) # ['a']

# 0番目から1番目(2番目は取得されない)
print(l[0:2]) # ['a', 'b']

# 1番目から3番目
print(l[1:4]) # ['b', 'c', 'd']

# 0番目から最後の一つ手前まで
print(l[0:-1]) # ['a', 'b', 'c', 'd']

# 0番目から最後まで
print(l[0:]) # ['a', 'b', 'c', 'd', 'e']

# 0番目から98番目まで(エラーは発生しない)
print(l[:99]) # ['a', 'b', 'c', 'd', 'e']

最初は少々難しく感じるかもしれませんが、なれると非常に便利な記法です。

listの要素数を確認する

リストの要素数はlen関数を利用します。(実はlen関数はリストのみならずシーケンス型全般で使用することが可能です。)

l = [1, 2, 3, 4, 0]

print(len(l)) # 5
print(l[len(l) - 1]) # 0

lenで要素数が取得出来ていることがわかると思います。また、lenで取得した値 - 1でリストの最後尾が取得できていることも確認できると思います。