Python リスト list 使い方

python

【Python入門】list(リスト)の使い方の総まとめ【前編】

2020年3月21日

こんにちは。

 

これから2回に分けてPythonのシーケンス型のうちの1つであるリスト(list)について説明していきます。今回は1回目になります。

 

 本記事の学習内容

  • シーケンス型について
  • リストの作り方
  • リストの値の参照の仕方
  • リストの要素数(長さ)の確認方法
  • リストに追加、削除、更新の方法について
  • リストの繰り返し処理について
  • リストについての課題【前編】

 

では、早速学習していきましょう。

 

シーケンス型とは

Python リスト list 使い方

シーケンス型とは、順番を持つデータの集合体を意味します。イメージとしては配列と考えて頂いて問題ありません。

 

リスト変数 = [データ1, データ2, ……, データN]

 

基本的なシーケンス型は以下の3つで、ミュータブル(可変)、イミュータブル(不変)があります。

 

リストがミュータブル(可変)で、他二つがイミュータブル(不変)になります。

 

 シーケンスの基本的な型3つ

  • リスト(list)
  • タプル(tuple)
  • range

 

この中でもリストはかなりの頻度で使いますので、しっかり習得していきましょう。なお、Pythonの公式ドキュメントは以下になります。

» 公式ドキュメント

 

リストの作り方

Python リスト list 使い方

まずはリストの作り方から見ていきましょう。

 

リストの基本的な作り方

リストの基本的な作り方は [ ] で囲った中にデータを入れていくことです。

 

データは , で区切ります。

 

下記に空、数値、文字列の順にコード例を記載します。

 

In[]

 

Out[]

 

タプル,range からリストに変換する方法

シーケンス型にはリスト以外にもタプル、rangeなどがありますが、これらはイミュータブル(不変)なのでデータの追加などができません。

 

タプル、range については以下の記事を参考にしてください。

関連記事
python タプル
【Python】タプルの使い方【基本から応用まで】

続きを見る

関連記事
python セット set
【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[]

 

リストの値の参照

Python リスト list 使い方

リストに入っているデータを使えるように、参照方法について説明します。

 

そのためにも、まず、リストの要素 No(index) について確認していきます。

 

要素Noはリストの何番目にデータがあるかの番号で、0から始まります

 

下記例では、水色が1次の要素Noで、緑色が2次の要素Noを表しています。

 

例えば、1次元変数の要素No0は1の値、2次元変数の要素No0 1 は2の値です。

Python リスト list 使い方 1次元と2次元リストの使い方

2次元配列は下記と同じことなので、感覚的にわかりやすいほうで把握してください。

 

Python リスト list 使い方

リストの値を要素Noで参照する方法

リストの値を使いたいときは、[要素No]と指定するだけです。

要素Noで参照する際の記術ルール

  • リスト変数[要素No]

 

下記コードで確認してみましょう。要素Noの0番目の1を取得しています。

In[]

Out[]

 

リストの値を要素Noの-1,-2…で指定する方法

次は要素Noにマイナスの値を指定しる方法を解説します。

 

要素Noはゼロ~(以上)では?と思われるかもしれませんが、リストの末尾から参照する場合は、-1、-2… と記述します。

 

リストの最後の値をさっと参照したい場合に-1をよく使います。

Python リスト list 使い方

横にうっすら同じ配列があると考えると、要素Noゼロから逆に-1,-2,となるイメージが掴めるかと思います。

Python リスト list 使い方

では実際に確認してみましょう。[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[]

 

リストの要素数=長さを確認する方法

Python リスト list 使い方

リストの要素数を確認する方法として、特にlenは頻用します。

len の記述の方法

  • len(リスト変数)

In[]

Out[]

2次元(多次元)はどうなのでしょうか?下記で確認してみましょう。

In[]

 

Out[]

2となり、1次元の要素数を返していることがわかります。

maxの使い方

max はリストの最大の値の要素を取得します。

max の記述のルール

  • max(リスト変数)

In[]

Out[]

 

続いて2次元(多次元)も説明したいところですが、多次元の場合はnumpyというライブラリを使うのが一般的なので、ここでは説明は省略させていただきます。

 

minの使い方について

min はリストの最小の値の要素を取得します。

min の記述のルール

  • min(リスト変数)

In[]

Out[]

リストの追加、削除、更新の方法について

Python リスト list 使い方

リストの特徴であるミュータブル(可変)の機能の解説をしていきます。

リストの特徴

  • 追加:append, extend, insert
  • 削除:clear, pop, remove, del
  • 更新

では各々について見ていきましょう。

追加:append, extend, insert の使い方について

リストにデータを追加する以下の方法は3つあります。以下の list_a  , list_b で確認していきましょう。

In[]

 

追加には以下3つのメソッドがあります。

 

 追加の3つのメソッド

  1. append
  2. extend
  3. insert

 

appendの使い方

appendはリストの末尾に追加します。

appendの記述のルール

  • リスト変数.append(追加対象)

下記コードで確認してみましょう。

In[]

Out[]

 

また、append メソッドについては以下にまとめていますので、参考にどうぞ。

関連記事
Python 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_blist_a  の要素No1に追加してみましょう。

 

In[]

 

Out[]

 

削除:clear, pop, remove, delの使い方について

次にリストの中身を削除していく方法についてみていきます。

 

 削除の4つのメソッドの使い方について

  1. clear
  2. pop
  3. remove
  4. del

 

clear の使い方

リストの変数の中身を全部削除します。

clear の記述のルール

  • リスト変数.clear()

In[]

Out[]

 

popの使い方

pop の末尾から順番に要素を取り出し、削除や指定した要素Noを取り出しつつ、削除をすることができます

 

ここで、最初のリストの定義である、「順番を持った…」に意味が出てきます。

 

末尾から取り出せるのは、リストが順番を持っているからになります。

pop の使い方について

  • 変数 = リスト変数.pop()
  • 変数 = リスト変数.pop(要素No)

In[]

Out[]

要素Noを指定して取り出す。

In[]

Out[]

 

良くある質問

  • Qpop メソッドは実業務の処理として、どのように使われることがありますか?
    単純にリストから削除するのであれば、remove や del でも良いのでは? popはどういった場面で活用できますか?
  • A:実際に現場でpopメソッドをあまり見ることはありません。
    一般的な用途でいえば、以下の記事の課題ではこの様な使い方を行います。
    関連記事
    Python オブジェクト指向 練習問題 入門
    【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[]

 

リストの繰り返し処理

Python リスト list 使い方

listfor 文を使うことで、一つずつ値を取得することができます。

リストの記述のルール

  • for 値 in リスト変数:

下記のコード例で確認してみましょう。

In[]

Out[]

文字列も同様に順番に取得が可能です。

In[]

Out[]

 

課題|リストの使い方の前編の課題

Python リスト list 使い方

0~99までのリストを作成して、奇数の数値のみの足し算、偶数の数値のみの足し算、すべての数値の足し算を行いましょう。

課題の仕様

  1. 変数名 list_hundred で0~99の数値のリストを作成してください。
  2. list_hundred からスライスを使って偶数のみをprint関数で表示してください。
  3. list_hundred からスライスを使って奇数のみをprint関数で表示してください。
  4. for文で list_hundred の偶数のみを変数名 sum1 に足してください。
  5. for文で list_hundred の奇数のみを変数名 sum2 に足してください。
  6. 100回繰り返すfor文で list_hundred を pop() を使って、値を取り出しつつ、sum_all に足してください。
  7. list_hundredprint で表示して中身を確認してください。

演習方法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[]

 

リストは頻出する方法ですので、是非ここでマスターする様にしましょう。

 

今回は以上となります。お疲れ様でした。

 

 

人気記事 機械学習は挫折しやすい【←挫折が多い原因と挫折回避の方法を教えます】

人気記事 無料あり:機械学習エンジニアの僕がおすすめするAI(機械学習)特化型プログラミングスクール3社


-python
-, , ,

Copyright© Tommy blog  , 2024 All Rights Reserved.