リストとは
シーケンス型と呼ばれる複数の値の並べたものの一つで、シーケンス型でもっとも重要な型です。「当サイト(In-Output)」では、これまで複数の要素は別々に扱ってきましたが、今後リストを使いまとめることが多いので、しっかりと理解しておいてください。
例として、「りんご」と「みかん」「バナナ」の3つの要素があるとします。
h1 = "りんご" h2 = "みかん" h3 = "バナナ"
リストを使うと、これらを一つにまとめることができます。
h = ["りんご","みかん","バナナ"] print(h)
リストはこのように[ ]大カッコで囲われていて、「,」カンマで要素を区切ります。
当サイトIn-Outputではこれまで変数名は「h」、カウンタ変数名は「i」を主に扱ってましたが、リストを扱う際は分かりやすくするために変数名を「list」または「li」とします。
リストを作成する
リストを作成する方法はいくつもあります。
ここでは、まず簡単にこれらのものはとりあえずはリストに入れれると思っていてください。
h = 3 list = [ 1 , "2" , h , h+1 ] print(list)
この時の要素は「1」は数値、「2」は文字、「3」は変数、「4」は計算(演算)となります。
リストから要素を取得する
リストから要素を取得するにはインデックスを指定してあげます。
インデックスとは
辞書的に言えば索引や見出しという意味になります。pyhtonをを含めプログラム上で使われるインデックスとは配列の添字を意味します。
例えば「あ,い,う,え,お」という配列があった場合、添字で0~4の数字が当てられます。
プログラムでは数字は0から数えることが多いので、インデックスを指定してあげる場合は注意しましょう。
リストから要素を取得するコード
コードを用いてインデックスの指定の方法を解説します。
list = ["あ","い","う","え","お"] print(list[0]) print(list[2])
う
インデックスの指定の方法は(リストの変数名[ 番号])で指定する事ができます。
数字は0から当てられるので、「0はあ」「2はう」になるわけです。
この時、5を指定すると、割り当てられてる要素が存在しないので、インデックスエラーが発生します。
これだけだと、リストが長くなると最後のほうは何番の数字を使えばいいのか分からなくなります。番号を「-1」としてあげるとリストの一番最後の要素を指定することができます。
同様に「-2」「-3」と後ろから数えてインデックスを指定する事ができます。
list = ["あ","い","う","え","お"] print(list[-1]) print(list[-5])
あ
スライス構文を使って要素を取得する
スライス構文を使って、連続する要素を取得する事ができます。
スライス構文の書き方は
と書きます。この時は開始インデックスは省略して[ : 終了インデックス]と書くこともできます。
注意点としてはこの時終了インデックスで指定した要素は取得されません。
for文の時に出てきましたrange関数と同様、終了で指定された要素はそれが出てきたら終了するという事になっている為です。
また、終了インデックスは範囲を超えていてもエラーは発生しません。
その場合最後の要素までが取得されます。
コードを見てみましょう。
list = ["あ","い","う","え","お"] print(list[0:2]) print(list[:2]) print(list[2:4]) print(list[:99])
[‘あ’,’い’](開始は省略、「う」が出てきて終了(ひょうじされない))
[‘う’,’え’](「う」で開始、「お」が出てきたら終了(表示されない))
[‘あ’,’い’,’う’,’え’,’お’](範囲を超えたら最後まで取得される)
0から数えたり、終了で指定した要素は表示されなかったりと、プログラミングに慣れていなければ、戸惑うことも多いですが、慣れれば大丈夫です。寧ろこの書き方が一番わかりやすいと思えるようになります。
リストに要素の追加
リストを操作するメソッドについて解説します。
メソッドとは
メソッドについて詳しく解説すると少し複雑になりますので、サクッと紹介します。
メソッドは関数です。関数はメソッドとは言えません。
ややこしくなりましたね(^^♪
単独で呼び出せるものは関数です「print()」や「range()」等、
単独では呼び出せず、変数や値を指定してから使うのが「メソッド」です。
動きや使い方は関数と同等ですので、変数等を指定して使う関数=メソッドで認識して問題ありません。
リストに要素を追加する。
appendメソッドを使ってリストに要素を追加する事ができます。
list = ["あ","い","う","え"] list.append("お") print(list)
appendで追加をするとリストの末尾に要素が追加されます。
追加したい箇所の指定をするときはinsertメソッドを使用します。
プログラミング初学者はインデックスの数をイメージしにくいと思います。
指定したインデックスの手前に要素が追加されるとイメージするとわかりやすいかと思います。
おさらいになりますが、インデックスは0から数えますので、0を指定すると、一番初めに要素が追加されます。
2を指定すると、012と並んでいる2の前に要素が追加されます。
コードを見てみましょう
list = ["あ","い","う","え","お"] list.insert(0,"a") list.insert(2,"b") list.insert(-2,"c") print(list)
プログラムは上から処理されます。まず、「0番のあ」の前に「a」が挿入されます。
この時点で0番は「a」、1番は「あ」、2番は「い」となっています。
次に2番の「い」の前に「b」が挿入されます。
最後に「-2」の「え」の前に「c」が挿入されます。
リストの要素やインデックスの削除
追加の次に削除方法を解説いたします。
要素の削除
要素を指定して削除する時はremoveメソッドを使用します。
list = ["あ","い","う","え","お","あ"] list.remove("あ") print(list)
removeメソッドで指定した要素がリスト内で重複している時は、一番最初の要素が削除されます。この場合最初の「あ」は削除され、最後の「あ」は残ります。
存在しない要素を指定するとエラーが発生します。
インデックスを指定して削除する
インデックスを指定して削除する方法は二つあります。
del構文を使用して削除
del構文を利用して、インデックスを指定して削除する方法を解説します。
コードを用いてdel構文を見てみましょう。
list = ["あ","い","う","え","お"] del list[0] #先頭の「あ」を削除 del list[1] #「あ」が無くなったので、「1」には「う」が指定されます del list[-1] #-1で最後の要素が指定されます。 print(list)
スライス構文を使って削除する事もできます。
list = ["あ","い","う","え","お"] del list[1:4] print(list)
popメソッドを利用して削除
popメソッドを利用して、インデックスを削除できます。この時削除された要素は戻り値として返されますので、出力したり変数として保存できたりできます。
コードを見てみましょう。
list = ["あ","い","う","え","お"] list.pop(2) print(list) list2 = ["か","き","く","け","こ"] h = list2.pop(2) print(h) print(list2)
く
[ ‘か’ , ‘き’ , ‘け’ , ‘こ’ ]
print(h)で抜き出した要素が変数「h」に代入されている事がわかります。
リストをソートする
リストの順番をソートする方法を解説します。
また、pythonのソートの基本として、数値は小さい値から、アルファベットは「a~z」ひらがなやカタカナは「あ~ん」の準備並び替えられ、数値>アルファベット>ひらがな>カタカナ>漢字の順でソートされます。
元のリストは保持してソートする方法
元のリストは保持したまま、別のリストとして、ソートされたリストを作成する方法を解説します。ちなみにリストのソートには[key]を指定するとソートの細かい設定等が行えるのですが、関数の仕組み等少し複雑なので、基礎編では解説しません。
元のリストを保持する場合、sorted関数を使います。
こちらもコードを用いて見てみましょう。
list = ["お","う","え","あ","い"] list2 = sorted(list) print(list) print(list2)
[ ‘あ’ , ‘い’ , ‘う’ , ‘え’ , ‘お’]
list2はソートされていることが分かります。
よく見かけるソート方法として、逆から並べえる事があります。
引数に「reverse = True」指定すると逆順でソートされます
list = ["お","う","え","あ","い"] print(sorted(list,reverse = True))
リストをソートする
リストそのものをソートする際はsortメソッドを使用します。
余談ですが、sortedは関数、sortはメソッドです。
メソッドと関数の違いはつかめてきましたでしょうか。
コードを見てみましょう。
list = ["お","う","え","あ","い"] list.sort() print(list) list.sort(reverse = True) print(list)
[ ‘お’ , ‘え’ , ‘う’ , ‘い’ , ‘あ’]
以上でpythonのリストの基礎は終了です。
リストはpythonを扱っていく上で非常に重要な項目ですので、基礎の範囲はしっかりマスターしておきましょう。
python問題 リスト 基礎
それではリストを使ったpythonの基礎問題です。
コードの結果を予測してください。また、python入門リスト編より、問題の中にエラー箇所が含まれる場合は問題に「エラーを見つけてください」と記載しますので、それ以外の問題にはエラーは発生しません。
問1:結果を予測してください。
list = [1,2,3,4,5] print(list[2]*3)
- 答えを見る
- A:9 (インデックス[2]は数値の3です。3*3の結果が出力されます。)
問2:結果を予測してください。
list = [1,2,3,4,5] print(list[1:3]*3)
- 答えを見る
- A:[2,3,2,3,2,3] (問1ではインデックス指定して数値が取得されましたが、スライス構文を使用して指定すると、リストが抜き出されます。スライス構文で[1:3]の指定だと、「2」と「3」が取得されますので、3回繰り返したリストが出力されました。)
問3:結果を予測してください
list = [1,2,3,4] list.append(5) list.insert(0,3) list.remove(3) del list[1] list.pop(2) print(list)
- 答えを見る
- A:[1,3,5]
(上から見ていくと、末尾に「5」が追加されます。
insertで先頭に「3」が差し込まれます。
removeで先頭の「3」が削除されます。
この時点で[1,2,3,4,5]です。
delで「2」が削除されます。
popで「4」が削除されます。)
問4:結果を予測してください
list = ["バナナ","いちご","アイス"] list.sort() print(list)
- 答えを見る
- A:[ ‘いちご’ , ‘アイス’ , ‘バナナ’ ]
(ひらがな>カタカナでソートされ、カタカナは「アイス」が先にソートされます。)
問5:間違え探し(エラーの原因を見つけてください)
list = ["バナナ","いちご","アイス"] list.sorted() print(list)
- 答えを見る
- A:sortedの書き方が間違えています。
list = ["バナナ","いちご","アイス"] list2 = sorted(list) print(list2)
上記が正解例です。
python入門ソートまとめ
ソートの項目はpython入門の中で一番長くなってしまって2分割にしようかとも考えましたが、なんとか1ページに収めました。
新たな関数やメソッド、構文等多数出てきましたが、どれもpythonにおける重要な項目です。
次項ではタプルと扱いますが、基本はリストと同じですので、もう一度リストの内容を再確認してからタプルへと進みましょう。