こんにちは。
これから2回に分けてPythonのシーケンス型のうちの1つであるリスト(list)について説明していきます。今回は1回目になります。
本記事の学習内容
- シーケンス型について
- リストの作り方
- リストの値の参照の仕方
- リストの要素数(長さ)の確認方法
- リストに追加、削除、更新の方法について
- リストの繰り返し処理について
- リストについての課題【前編】
では、早速学習していきましょう。
シーケンス型とは
シーケンス型とは、順番を持つデータの集合体を意味します。イメージとしては配列と考えて頂いて問題ありません。
リスト変数 = [データ1, データ2, ……, データN]
基本的なシーケンス型は以下の3つで、ミュータブル(可変)、イミュータブル(不変)があります。
リストがミュータブル(可変)で、他二つがイミュータブル(不変)になります。
シーケンスの基本的な型3つ
- リスト(list)
- タプル(tuple)
- range
この中でもリストはかなりの頻度で使いますので、しっかり習得していきましょう。なお、Pythonの公式ドキュメントは以下になります。
リストの作り方
まずはリストの作り方から見ていきましょう。
リストの基本的な作り方
リストの基本的な作り方は [ ]
で囲った中にデータを入れていくことです。
データは ,
で区切ります。
下記に空、数値、文字列の順にコード例を記載します。
In[]
Out[]
タプル,range からリストに変換する方法
シーケンス型にはリスト以外にもタプル、rangeなどがありますが、これらはイミュータブル(不変)なのでデータの追加などができません。
タプル、range については以下の記事を参考にしてください。
-
【Python】タプルの使い方【基本から応用まで】
続きを見る
-
【Python】セット(集合体)の使い方のまとめ【基本から応用まで】
続きを見る
データの変更ができるリストに変換したい場合、 タプル変数など を list()
で囲って、新しい変数に入れます。
タプルからリスト型に変換する際のポイント
リスト変数 = list(タプル変数)
以下のコードで確認してみましょう。
まず、タプルのリスト型への変換です。
タプルは [ ]
ではなく、( )
でデータを囲います。変換されているか、typeメソッドで型の確認も一緒にしてみましょう。
In[]
Out[]
きちんとリスト型に変換されていることが分かります。
続いて、range
の変換です。同様に type
で型の変換がきちんと出来ているのかを確認してみましょう。
rangeは()
に数字を入れることで、0~ 入れた数字-1
の値を作ってくれます。
range(4)
だと [0, 1, 2, 3]
が作られます。
In[]
Out[]
2次元(多次元)
シーケンス型はリストにリストを入れることで、2次元または多次元のデータにすることができます。
実際にコードで確認していきましょう。リストを作って、リストに入れていきます。
In[]
Out[]
下記でも同じことになりますので、同様に確認してみてください。
In[]
Out[]
リストの値の参照
リストに入っているデータを使えるように、参照方法について説明します。
そのためにも、まず、リストの要素 No(index)
について確認していきます。
要素Noはリストの何番目にデータがあるかの番号で、0から始まります。
下記例では、水色が1次の要素Noで、緑色が2次の要素Noを表しています。
例えば、1次元変数の要素No0は1の値、2次元変数の要素No0 , 1 は2の値です。
2次元配列は下記と同じことなので、感覚的にわかりやすいほうで把握してください。
リストの値を要素Noで参照する方法
リストの値を使いたいときは、[要素No]と指定するだけです。
要素Noで参照する際の記術ルール
- リスト変数[要素No]
下記コードで確認してみましょう。要素Noの0番目の1を取得しています。
In[]
Out[]
リストの値を要素Noの-1,-2…で指定する方法
次は要素Noにマイナスの値を指定しる方法を解説します。
要素Noはゼロ~(以上)では?と思われるかもしれませんが、リストの末尾から参照する場合は、-1、-2… と記述します。
リストの最後の値をさっと参照したい場合に-1をよく使います。
横にうっすら同じ配列があると考えると、要素Noゼロから逆に-1,-2,となるイメージが掴めるかと思います。
では実際に確認してみましょう。[0, 1, 2]
に対して -1
と -2
を指定して、配列の後ろ2つの値を取得します。
In[]
Out[]
スライスの使い方
スライスという方法を使用すると、指定範囲の要素を取り出すことができます。
スライスの記述ルール
- リスト変数[開始要素No: 終了要素No]
- リスト変数[開始要素No: 終了要素No: 増分]
但し、以下の点について注意です。
ココに注意
終了要素Noまでのデータが取得できるのではなく、終了要素Noの1つ前までの範囲で取得される点に注意しましょう。
では、コードで確認してみましょう。0~9の数字のリストを用意して、1番目から4番目を取り出すとしましょう。
その場合、4番目の次の要素Noの「5」を指定する必要があります。
In[]
Out[]
増分を指定すると、指定した増分の間隔でデータを取得するので、下記の様に奇数のみを取得することもできます。
In[]
Out[]
2次元(多次元)のデータのリストの参照方法
次は2次元(多次元)のデータの参照方法です。
2次元の場合はリスト変数[1次の要素No][2次の要素No]とすることで値を取得することができます。
2次元のリストのデータの参照方法
- リスト変数[1次の要素No][2次の要素No]
In[]
Out[]
1次元と2次元の要素Noの場所で混乱する方は以下の様に理解しましょう。
要素Noの説明図をもう一度見ていただくか、下記のように、いったん2次元のリスト変数から1次の要素を取得して、別の変数に入れていくと理解しやすいです。
In[]
Out[]
リストの要素数=長さを確認する方法
リストの要素数を確認する方法として、特にlenは頻用します。
len の記述の方法
- len(リスト変数)
In[]
Out[]
2次元(多次元)はどうなのでしょうか?下記で確認してみましょう。
In[]
Out[]
2となり、1次元の要素数を返していることがわかります。
maxの使い方
max
はリストの最大の値の要素を取得します。
max の記述のルール
- max(リスト変数)
In[]
Out[]
続いて2次元(多次元)も説明したいところですが、多次元の場合はnumpyというライブラリを使うのが一般的なので、ここでは説明は省略させていただきます。
minの使い方について
min
はリストの最小の値の要素を取得します。
min の記述のルール
- min(リスト変数)
In[]
Out[]
リストの追加、削除、更新の方法について
リストの特徴であるミュータブル(可変)の機能の解説をしていきます。
リストの特徴
- 追加:append, extend, insert
- 削除:clear, pop, remove, del
- 更新
では各々について見ていきましょう。
追加:append, extend, insert の使い方について
リストにデータを追加する以下の方法は3つあります。以下の list_a
, list_b
で確認していきましょう。
In[]
追加には以下3つのメソッドがあります。
追加の3つのメソッド
- append
- extend
- insert
appendの使い方
appendはリストの末尾に追加します。
appendの記述のルール
- リスト変数.append(追加対象)
下記コードで確認してみましょう。
In[]
Out[]
また、append メソッドについては以下にまとめていますので、参考にどうぞ。
-
【Python】appendの使い方のまとめ【基本から応用まで】
続きを見る
extendの使い方
先ほどの append では list_b
が末尾にそのまま入ってしまい、 [1, 2, 3, 4, [5, 6]]
となりましたが、[1, 2, 3, 4, 5, 6]
としたい場合には、extend
を使って、リスト同士を結合します。
extendの記述ルール
- リスト変数.extend(追加対象)
In[]
Out[]
extendはリスト同士の結合なので、下記のように数値を入れるとエラーになるので注意してください。
In[]
Out[]
Errorを確認すると int型 はダメと言われていますね。
insert の使い方
appendは末尾に追加していくメソッドでしたが、insertを追加する要素Noを指定することができます。
insertの記述のルール
- リスト変数.insert(要素No, 追加対象)
list_b
を list_a
の要素No1に追加してみましょう。
In[]
Out[]
削除:clear, pop, remove, delの使い方について
次にリストの中身を削除していく方法についてみていきます。
削除の4つのメソッドの使い方について
- clear
- pop
- remove
- del
clear の使い方
リストの変数の中身を全部削除します。
clear の記述のルール
- リスト変数.clear()
In[]
Out[]
popの使い方
pop の末尾から順番に要素を取り出し、削除や指定した要素Noを取り出しつつ、削除をすることができます
ここで、最初のリストの定義である、「順番を持った…」に意味が出てきます。
末尾から取り出せるのは、リストが順番を持っているからになります。
pop の使い方について
- 変数 = リスト変数.pop()
- 変数 = リスト変数.pop(要素No)
In[]
Out[]
要素Noを指定して取り出す。
In[]
Out[]
良くある質問
- Q:
pop
メソッドは実業務の処理として、どのように使われることがありますか?
単純にリストから削除するのであれば、remove や del でも良いのでは? popはどういった場面で活用できますか? - A:実際に現場でpopメソッドをあまり見ることはありません。
一般的な用途でいえば、以下の記事の課題ではこの様な使い方を行います。
この課題の例でいえば、患者の予約が入ると、どんどんリストに患者がたまっていきますね。関連記事-
【Python】オブジェクト指向の練習問題【診療支援アプリ作成】
続きを見る
予約順に診察の処理したいときに pop を使って、溜まった患者さんの診察を行いますが、その際には以下の方法を使用します。・予約が入る、患者リストの先頭に患者オブジェクトを追加
・診察するとき、患者リストからpopで取得した患者オブジェクトの人を診察この2つを繰り返すなどの方法で pop メソッドを使用します。 -
remove
指定した要素を削除します。要素Noではない点はご注意ください。
ココがポイント
- リスト変数.remove(要素)
下記例では、list_numの「1」を削除しています。
In[]
Out[]
数字だと要素Noと混乱するので、ここは、文字列の方がわかりやすいと思いますので、文字列でも確認しておきましょう。
先ほどは1を指定して削除しましたが、下記では ’ cat
’ を指定して削除します。
In[]
Out[]
del の使い方について
del
では、要素Noやスライスで指定した要素を削除します。
del の記述のルール
- del リスト変数[要素No]
- del リスト変数[要素No:要素No]
- del リスト変数[要素No:要素No:増分]
[1, 2, 3, 4]を削除して、動作を確認してみましょう。
In[]
Out[]
In[]
Out[]
更新の使い方について
更新は値を取得するときの様に、要素Noを指定して、値を代入します。
更新の記述の仕方
- リスト変数[要素No] = 値
- リスト変数[要素No:要素No] = 値
- リスト変数[要素No:要素No:増分] = 値
[0, 0, 0, 0, 0]
の値を更新して、動作を確認してみましょう。
要素Noを指定して代入
In[]
Out[]
スライスで範囲を指定して代入。代入する値は、範囲指定分のリストである必要があります。
In[]
Out[]
スライスで範囲、増分を指定して代入。
In[]
Out[]
リストの繰り返し処理
list
は for
文を使うことで、一つずつ値を取得することができます。
リストの記述のルール
- for 値 in リスト変数:
下記のコード例で確認してみましょう。
In[]
Out[]
文字列も同様に順番に取得が可能です。
In[]
Out[]
課題|リストの使い方の前編の課題
0~99までのリストを作成して、奇数の数値のみの足し算、偶数の数値のみの足し算、すべての数値の足し算を行いましょう。
課題の仕様
- 変数名
list_hundred
で0~99の数値のリストを作成してください。 list_hundred
からスライスを使って偶数のみをprint関数で表示してください。list_hundred
からスライスを使って奇数のみをprint関数で表示してください。- for文で
list_hundred
の偶数のみを変数名sum1
に足してください。 - for文で
list_hundred
の奇数のみを変数名sum2
に足してください。 - 100回繰り返すfor文で list_hundred を
pop()
を使って、値を取り出しつつ、sum_all
に足してください。 list_hundred
をprint
で表示して中身を確認してください。
演習方法1
課題と仕様を見て、自身でコーディングしてみてください。
コーディングに不安な方は、演習方法2のコードの穴埋めにて演習を実施してください。
演習方法2
— コード追加 — に1行ずつコードを埋めていって、プログラムを完成させてください。
演習のJupyter notebookをご利用される方は演習(google driveリンク)を参照いただければと思います。
●変数名list_hundredで0~99の数値のリストを作成してください。
その①:変数名list_hundredで0~99の数値のリストを作成してください。
In[]
その②:list_hundred
からスライスを使って偶数のみを print関数 で表示してください。
In[]
その③:list_hundred からスライスを使って奇数のみを print関数 で表示してください。
In[]
その④:for文で list_hundred の偶数のみを変数名 sum1 に足してください。
In[]
その⑤:for文で list_hundred の奇数のみを変数名 sum2 に足してください。
In[]
その⑥:100回繰り返すfor文で list_hundred を pop() を使って、値を取り出しつつ、sum_all に足してください。
In[]
その⑦:list_hundred を print で表示して中身を確認してください。
In[]
解答例
解答例(google driveリンク)を参照いただければと思います。
その①:変数名 list_hundred で0~99の数値のリストを作成してください。
In[]
その②:list_hundred からスライスを使って偶数のみをprint関数で表示してください。
In[]
その③:list_hundred からスライスを使って奇数のみをprint関数で表示してください。
In[]
その④:for文で list_hundred の偶数のみを変数名 sum1 に足してください。
In[]
その⑤:for文で list_hundred の奇数のみを変数名 sum2 に足してください。
In[]
その⑥:100回繰り返すfor文で list_hundred を pop() を使って、値を取り出しつつ、sum_all に足してください。
In[]
その⑤:list_hundred を print で表示して中身を確認してください。
In[]
リストは頻出する方法ですので、是非ここでマスターする様にしましょう。
今回は以上となります。お疲れ様でした。