本日はPythonでリストを書く方法を解説していきます。
配列という複数のデータを保持する考え方がプログラミングにありますが、Pythonでは配列のことを「リスト」と表現します。
リストは単なる要素の集まりではなく、データを整理して効率的に処理するための優れた手段です。
Pythonにおいても複数のデータ構造は非常に重要で、様々な操作や処理を行う上で基本中の基本と言えます。
本記事ではPythonにおけるリストの基本的な使い方から高度な操作まで包括的に解説していきます。
さっそく、Pythonにおけるリストの基本的な操作について見ていきましょう。
また動画もあるので必要な方は活用してください。
Pythonでリスト(配列)を操作する
他のプログラミング言語と同じくPythonでも[ ]の中にデータを書きます。
データは要素とも呼びますが、要素間は「,」で区切って左から0,1,2…と数えるインデックス番号が自動で振られます。
また初期設定などで最初はデータがない時もあります。
そのようなときは空の状態で[ ]を書けば「データが空の状態のリスト」として認識されます。
list1 = [1,2,3]
list2 = ["a","b","c"]
list3 = []
print(list1, list2, list3, sep=",") # [1, 2, 3],['a', 'b', 'c'],[]と表示される
Pythonでリスト(配列)の中の特定の要素を取得、変更する
先ほどのコードでは配列の中にある要素を全て表示させましたが、インデックス番号を使って特定の要素のみを表示させることも可能です。
list1 = [1,2,3]
list2 = ["a","b","c"]
list3 = []
print(list1[0], list[1], list[2], sep=",") # 1,2,3と表示される
初心者の方が注意しないといけないのがインデックス番号はあくまで連番であって、「配列の中のデータの個数」を表すものではありません。
例えばリストの中に何個の要素があるかを確認するにはlenメソッドを使って、引数に要素の個数を数えたいリスト名を指定します。
以下の場合だと3が表示されます。
list1 = [1,2,3]
print(len(list1)) # 3と表示される
インデックス番号を意識しすぎるデータの個数を数えるときも「0,1,2だから2個だ」となってしまいがちです。
インデックス番号はデータの個数ではないので気をつけましょう。
インデックス番号を指定することでデータの取得だけでなくデータの変更が可能です。
arr1 = ["a","b","c"]
arr1[0] = "d"
print(arr1) # ['d', 'b', 'c']と表示される
仮に入れ子のリストでも順番にインデックス番号を指定すればOKです。
arr2 = [["a","b","c"],["d","e","f"]]
arr2[0][0] = "d"
print(arr2) # [['d', 'b', 'c'], ['d', 'e', 'f']]と表示される
Pythonで後から配列の中に要素を追加、特定の要素を削除する
続いてappendというメソッドを使うことで引数に入れたデータを後から追加する書き方を紹介します。
arr3 = [1,2,3]
arr3.append(4)
print(arr3) # [1, 2, 3, 4]と表示される
appendは引数に入れた要素を配列の末尾に追加してくれるものです。
もしくはinsertメソッドを使えば追加する場所をインデックス番号で指定することができます。
arr4 = [1,2,3]
arr4.insert(1,4)
print(arr4) # [1, 4, 2, 3]と表示される
追加の反対で削除はdelという文法でインデックス番号を指定すれば、指定されたインデックス版フォウの要素の削除を実行します。
arr5 = [1,2,3,4,5]
del arr5[0]
print(arr5) # [2, 3, 4, 5]と表示される
加えてpopというメソッドを使用すると削除した要素を別で取得することができます。
arr5 = [1,2,3,4,5]
del arr5[0]
print(arr5) # [2, 3, 4, 5]と表示される
result = arr5.pop(0)
print("削除したのは", result, "残りは", arr5) # 削除したのは 2 残りは [3, 4, 5] と表示される
ちなみに削除についてはインデックス番号ではなくデータの内容を指定して削除できるremoveというメソッドもあります。
arr6 = ["a","b","c"]
arr6.remove("b")
print(arr6) # ['a', 'c']と表示される
削除する前に対象のデータがそもそも存在しているのか事前に確認したい場面があります。
リストの中の要素を検索するにはindexメソッドというもので引数に検索したいデータの内容を入れると、見つかった場合にインデックス番号で返してくれます。
つまり以下のような使い方ができます。
arr7 = ["a","b","c"]
print(arr7.index("a"), "番目にあります") # 0 番目にあります と表示される
Pythonでリスト(配列)から複数の要素を取得する方法
先ほどインデックス番号を使用して特定の要素のみを取り出す方法を紹介しました。
しかし2個、3個など「1個だけじゃない取り方」ということには対応できません。
そこでスライスというものを使うとインデックス番号の概念を取り入れつつ複数のデータを取得することができます。
例えば0番目と1番目の2個を取得したいときは以下のような感じです。
arr = ["a","b","c","d","e"]
print(arr[0:2]) # ['a','b']と表示される
大括弧の中で取り出したい最初のインデックス番号と、最後の次のインデックス番号をかくと、対応したデータが配列にまとめられて返されます。
注意なのが範囲の最後については1を加算する点です。
「0番目から1番目が欲しいなら0と2を書く」といった具合です。
スライスはもちろん特定のデータのみでも大丈夫ですが、配列になって返ってくる点には注意してください。
arr = ["a","b","c","d","e"]
print(arr[0:1]) # ['a']と表示される
さらに範囲を指定した上で「2個先のものを取得」みたいなこともできます。
大括弧の中で3番目に数字を書くと指定された範囲内でスキップしながら取得します。
arr = ["a","b","c","d","e"]
print(arr[0:4:2]) # ['a', 'c']と表示される
3番目の数字は必須項目ではないので書かなければ自動的に先ほどのような1個ずつ並べる感じです。
ちなみにスライスには「範囲の最初が0番目」もしくは「範囲の最後が配列の最後」の時だけ以下のような省略記法が使用できます。
arr = ["a","b","c","d","e"]
print(arr[0:5:2]) # ['a', 'c', 'e']と表示される
print(arr[::2]) # ['a', 'c', 'e']と表示される
上記の例では範囲が0番目と5番目(配列の最後)なので大括弧の中は第3の数字であるスキップする感覚だけを書いています。
その際には「:」ではなく「::」と書くことで[省略:省略:2] = [0 : 4: 2]という意味になるわけです。
もう一つだけ例を紹介します、以下は最初の数字だけを省略したパターンです。
arr = ["a","b","c","d","e"]
print(arr[0:4:2]) # ['a', 'c']と表示される
print(arr[:4:2]) # ['a', 'c']と表示される
ちなみにスライスの概念を使って新しい配列を作成することもできて、rangeというメソッドを使用します・
例えば数字で1ずつ連番を並べたリストを作りたいとしたら以下のような感じです。
arr = list(range(5))
print(arr3) # [0, 1, 2, 3, 4]と表示される
上記のコードは0番目から4番目までの数字を要素として並べたリストを作成するというものです。
スライス同様に、単純に数字をカウントするだけでなく配列として返すのが特徴です。
また奇数のように2個先の数字を並べていくなら以下のような感じです。
arr = list(range(1,6,2))
print(arr3) # [1, 3, 5]と表示される
スライスと同じような指定範囲とスキップする先を指定しているわけです。