はじめに
ここでは、pythonプログラミングの基本である、リストについて解説します。まずは、Google Colaboratoryの使い方 を参考に、プログラミングの環境に移動しましょう。ローカルに環境を構築している方は、そちらでもokです。
リストについて
以下のコードを見てみましょう。
a = 10
b = 20
c = 30
d = 40
e = 50
何の変哲も無い、5つの数字を変数に代入するコードです。しかし、これを行うためにわざわざ変数を5つも用意するのは少し冗長に感じます。これを解消する方法の一つが、リストと呼ばれる変数です。上記のコードをリストで表現するには、以下のように記載します。
a = [10, 20, 30, 40, 50]
四角いカッコのなかに、カンマで区切られた5つの数字が並んでいます。この中から、例えば10と50を表示したいときは、以下のように記載します。
a = [10, 20, 30, 40, 50]
print("リストaの0番目の要素は", a[0], "です。")
print("リストaの4番目の要素は", a[4], "です。")
print("リストaは", a, "です。")
10と50が表示されたと思います。ここでわかるように、リストの個別の要素を取り出すには、a[0] や a[4] のように記載します。とても単純ですが、一点注意してほしいことがあります。それは、はじまりの要素が0番目であるということです。普通に暮らしている場合、1をスタートにしてカウントを行うことがほとんどです。でも、プログラミングの場合は、大抵の場合は0が基準になります。
5個の要素を持つリストaの場合、最後の要素にアクセスしたいとき、a[5]のように書きたくなってしまいますが、0番目がスタートですから、正しくはa[4]となります。
なお、4行目にあるように、要素数を指定しないでリストaを与えた場合は、aの中身がすべて表示されます。
リストの長さ
リストは複数の要素を持つことが普通です。そのため、いくつの要素を持っているのか?という視点が発生してきます。プログラミングの世界では、これをリストの長さと表現します。
リストの長さは、ある程度であれば目で見ればすぐにわかります。しかし、要素数がとても多いリストや、システムによってリストの長さが変化するコードを扱う場合、目で数えることはできなくなります。その代りとして、リストの長さを自動で取得する機能、len関数が用意されています。len関数は、第1引数にリストを渡せば、その長さを返してきてくれます。以下が使用例です。
a = [10, 20, 30, 40, 50]
b = len(a)
print("リストaの長さは", b, "です。")
ポイントは2行目です。len関数の第1引数にリストaが入力されています。したがって、「=」の右辺にはaの長さである5があります。それが「=」の左辺に代入されますから、bには5が与えられることになります。結果として、リストaの長さがprint関数で表示されます。
ちょっと難しいですが、以下のコードは理解できるでしょうか。
a = [10, 20, 30, 40, 50]
b = a[len(a)-1]
print("bの値は", b, "です。")
2行目の右辺に注目してください。リストaの要素として、len(a)-1 が記載されています。len(a)は5ですから、len(a)-1 は4になります。つまり、a[len(a)-1] とは、a[4] と同じ意味を持ちます。このことから、a[4]がbに代入され、結果として50が表示されます。
リストの要素を逆から指定する方法
リストを扱っているとき、後ろからn番目の要素を取り出したいと思うことがあります。これを実現する記法もあります。例えば、以下のコードを見てください。
a = [10, 20, 30, 40, 50]
b = a[-1]
c = a[-2]
print("リストaの後ろから1番目の要素は、", b, "です。")
print("リストaの後ろから2番目の要素は、", c, "です。")
後ろ2つの要素(50と40)が表示されたはずです。これは、2行目と3行目に、リストaの要素の指定として、マイナスが使われているためです。a[-1] であれば a の1番後ろの要素、a[-2] であれば a の後ろから2番目の要素が取り出されます。
ちなみに、一点補足ですが、わざわざ b や c の変数を経由させなくても、直接 print関数で表示できます。
a = [10, 20, 30, 40, 50]
print("リストaの後ろから1番目の要素は、", a[-1], "です。")
print("リストaの後ろから2番目の要素は、", a[-2], "です。")
必ず代入させないといけないという感覚が身についてしまうといけませんので、どちらの記法にも慣れておくと良いでしょう。
append関数: 後ろに新しい要素を追加する方法
リストの一番後ろに要素を追加したいときは、append 関数を利用します。以下がその使用例です。
list_A = [10, 20, 30]
print("appendの前", list_A)
list_A.append(50)
print("appendの後", list_A)
最初のprintでは「10, 20, 30」と表示されますが、最後のprintでは「10, 20, 30, 50」と表示されます。append関数の前後で表示が違いますから、append関数により、リストの1番後ろに50が追加されたことがわかります。append関数は、第1引数に追加したい値を記載します。
もしかすると、
- list_A[3] = 50 と書いてはいけないのか?
という疑問が枠かもしれません。list_A[2]が最後の要素ですから、その後ろにある list_A[3] に数字を代入しようという発想です。結論から言うと、これはできません。実行するとエラーになります。list_Aは、list_A[0]〜list_A[2]までのスペースしか用意されておらず、list_A[3] を有していません。したがって、存在しないスペースに代入しようとしていることになり、エラーになるわけです。最後に要素を追加したいときは、append関数を利用しましょう。append 関数は、一番後ろにスペースを作った上で値を代入すると捉えると、わかりやすいかもしれません。
リストの要素にある値を書き換える方法
すでにスペースが用意されている箇所については、特別な関数を利用しなくとも、直接、値を書き換えることができます。例えば、以下のコードを見てください。
list_B = [1, 2, 3]
print("リストB(書き換え前)", list_B)
list_B[1] = 100
print("リストB(書き換え後)", list_B)
3行目は、右辺にある100を、左辺にあるlist_B[1]に代入するコードです。この前後のprintで、値が書き換えられていることが確認できるはずです。
pop関数: リストの一番後ろの要素をスペースごと削除する方法
append関数により、リストの一番後ろに要素を追加できることを説明しました。その対照的な機能として、pop関数があります。これを利用すると、リストの一番後ろの要素が、スペースごと削除されます。
list_C = [1, 2, 3]
print("popの前", list_C)
list_C.pop()
print("popの後", list_C)
3行目がpop関数です。list_Cに作用させていますので、この一番後ろの要素である3が、スペースごと削除されます。後ろを削除せよという関数ですから、引数を入れる必要がありません。そのため、pop() というように、何も入力されない丸カッコがあるわけです。
スペースごと削除されるということは、長さが変化しているはずです。これもチェックしておきましょう。
list_C = [1, 2, 3]
print("pop前の長さ", len(list_C))
list_C.pop()
print("pop後の長さ", len(list_C))
pop前後で、長さが3から2に変化したはずです。このように、単に値だけを空白にしているわけではなく、スペースすらも削除していることになります。
insert関数: 任意の位置に値を挿入する方法
任意の位置に要素数を追加するには、insert関数を利用します。
a = [2, 6, 8]
print("insertの前", a)
a.insert(1, 4)
print("insertの後", a)
[2, 6, 8] が [2, 4, 6, 8] に変化したことがわかります。3行目にあるinsert関数によるもので、第1引数が追加する場所、第2引数が追加する値となります。第1引数が1で第2引数が4ですから、a[1] の位置に4を挿入せよ、というコードになります。
a[1] = 20などと書くと、値が書き換えられてしまいます(リストの長さは変わりません)。insert関数を利用すると、書き換えではなく、スペースを確保した上で追加が行われます(リストの長さが1増えます)。
その他にできること
他にも色々とできることの肌感覚を得るために、以下のコードを実行してみましょう。
a = ["円でした。", "林檎1つの", "円です。", "値段は", 50, "個買ったので"]
b = 8
c = b * a[4]
s = a[1] + a[3]
print(s, a[4], a[2], b, a[-1], c, a[0])
- 1行目より、文字列を要素に加えることができます。また、数字と文字列を同じリストで使用できます。
- 3行目より、変数とリストの要素で、四則演算が可能であることがわかります。
- 4行目より、リストの要素とリストの要素で、文字列の結合が可能であることがわかります。
以上のように、リストは比較的自由度の高い機能です。ぜひマスターしましょう。