Python入門
第9回.リスト(list型、配列)

Pythonの初心者向け入門解説、人気のプログラミング言語Python
最終更新日:2020-09-21

第9回.リスト(list型、配列)


プログラミングにおいて覚えなければならないものとして配列があります。
Pythonの組み込み型に、リスト(list型)とタプル(tuple型)があります。
今回はリスト(list型)について解説します。


目次

リスト(list型)とは

Pythonの配列を扱うデータ型にlist型があります。
公式ドキュメント - リスト型
配列とは、複数の要素(値)を格納できるデータ型です。
リスト値と言ったときには、リストそのもの、つまりリスト全体の値を指します。
紛らわしいのでリスト値という書き方は使わず、その場合は単にリストと記します。
リストは,カンマ区切りの値の並びを[]角括弧で囲んで作成します。

Python list リスト

,カンマの前後にはスペースがあっても無くても構いません。
要素が1つの場合は,カンマは不要です。
要素数が0の配列(空の配列、空リスト)は、[]だけにすることで作成できます。

リストの入れ子による多段階配列の作成

リストの要素(値)には、さらにリストや他のオブジェクトを入れることができるので、階層を持ったデータ構造を作成できます。

Python list リスト

シーケンス型とイテラブルオブジェクト

list型はシーケンス型であり、イテラブルオブジェクトです。

これは言葉の定義の話で、特に覚えなければならないものではありませんが、ドキュメントを読むときの知識としては必要になります。

シーケンス型とは
複数の要素を順番に並べたデータ型です。
公式ドキュメント - シーケンス型
イテラブルオブジェクトとは
イテレータにより反復可能なオブジェクトです。

データ構造による分類と、実装されているメソッドによる分類の違いと考えれば良いでしょう。
Pythonでは、シーケンス型はイテラブルです。
str、list、 tuple、range、これらは、シーケンス型でありイテラブルです。
しかし、イテラブルは必ずしもシーケンスではありません。
dict(辞書)やset(集合)はイテラブルですが、シーケンスではありません。


リスト演算子

+演算子

+演算子は、2つのリストを連結します。

Python list リスト

+=の累算代入演算子も同様に適用できます。

Python list リスト

*演算子

*演算子は、*の後ろに書いた数だけリストを複製します。

Python list リスト

inとnot in

inとnot inは、コンテナオブジェクトに対して、左辺の値が右辺の要素に含まれているかどうかを判定します。

左辺の文字列が右辺のリストに含まれるかどうかを評価します。
inは、含まれていればTrue
not inは、含まれていなければTrue

Python list リスト

大文字小文字が区別されます。


リストのインデックスとスライス

リストのインデックス

インデックスは先頭が0から始まります。

Python VBA    GAS    C++    C#    
0 1 2 3 4
-5 -4 -3 -2 -1

リスト変数[index]

これで、指定したインデックスの位置の要素(値)を取得することができます。

Python list リスト

インデックスの範囲外を取得しようとするとエラーになります。

Python list リスト


リストのスライス

シーケンス(文字列、リスト、タプル等)から部分的に取得することをスライスと呼びます。
スライスの指定は、

リスト変数[start:stop]
リスト変数[start:stop:step]

startからstop-1(stopの1つ前)までが取得されます。
スライスでは、stopにはリストの要素数(最大インデックス+1)以上が指定できます。
stepは飛び飛びで取得する場合に使用します。

Python list リスト

stop-1つまりstopの1つ手前までが範囲になる点に注意してください。
インデックス範囲外の数値を指定してもエラーにならず、有効な範囲内の要素が取得されます。

startを省略した場合は先頭の要素、stopを省略した場合は最後の要素になります。

Python list リスト


スライスでリストの値を変更

指定したインデックスの要素(値)を変更することができます。

Python list リスト

スライスで取得した要素(値)に代入することで変更することができます。

Python list リスト

スライスに代入する場合は要素数に気を付けてください。
代入するリストの要素数が、スライスした要素数より少ないとその分の要素は減り、それより後ろの要素が前に詰まります。
逆に代入する要素数が多いとその分の要素が挿入され、それより後ろの要素は後ろにずれます。

リストの要素にリストを入れることができます。

Python list リスト


スライスでリストの要素を追加

スライスでstartとstopに同一インデックスを指定することで、そのインデックスの位置に要素を追加できます。

エクセル Excel サンプル画像

len()は、オブジェクトの長さ (要素の数) を返す組み込み関数です。
Pythonには数多くの関数と型が組み込まれており、様々な処理を行うことができます。組み込み関数は、Python入門の中でもすでにいくつか使用していますし、これからも頻繁に使用していきます。全部で69個あります。

del文でリストの要素を削除

del文を用いてリストのインデックスまたはスライスの要素を削除できます。
削除された要素より後ろの要素は前に詰まります。

Python list リスト


リストのアンパック

複数の変数に複数の値を代入する

Pythonでは、複数の変数に1行で代入することができます。

Python list リスト

左辺の変数の数と右辺の値の数が一致していない場合はエラーになります。

この複数代入の書き方と同じ書き方で、リストの複数の要素を一度に複数の変数に入れることができます。
リストを展開して複数の変数に代入することをアンパックと言います。

アンパックの対象は、リスト全体でも良いしスライスでも構いません。
ただし、左辺の変数の数と右辺のリストの要素数は一致している必要があります。
一致していない場合はエラーになります。

Python list リスト

f'またはf"については、文字列操作f-string(フォーマット済み文字列リテラル)


for文とリスト

for文の詳細については以下を参照してください。
第6回.for文とイテラブルオブジェクト
プログラムとは処理手順であり、突き詰めれば条件分岐しながら繰り返し処理を行うものです。繰り返し処理はプログラミング言語に無くてはならない処理になります。Pythonでの繰り返し処理のうち、今回はfor文の説明になります。

for文で要素を1つずつ取り出すことができます。

for word in ["pthon","range","list","tuple"]:
    print(word)
Python list リスト


while文とリスト

while文の詳細については以下を参照してください。
第7回.while文とデバッグ(ステップイン)
プログラムとは処理手順であり、突き詰めれば条件分岐しながら繰り返し処理を行うものです。Pythonでの繰り返し処理のうち、今回はwhile文の説明になります。for文に比べると使用頻度は落ちると思いますが、基本として身に付けておくべきものです。

lst = ["pthon","range","list","tuple"]
i = 0
while i < len(lst):
    print(lst[i])
    i += 1
Python list リスト

len()は、オブジェクトの長さ (要素の数) を返す組み込み関数です。


リストに要素を追加するメソッド:append , insert , extend

append()メソッド

リストの最後に要素を追加します。

Python list リスト

スライスでの追加との違いを確認してください。

insert()メソッド

リストの指定インデックスの手前に要素を挿入します。

Python list リスト

スライスでの追加との違いを確認してください。

extend()メソッド

リストの要素をリストの最後に追加します。
スライスでの、リスト変数[len(リスト変数):len(リスト変数)] この指定と同じ結果になります。

Python list リスト

リストの要素を削除するメソッド:remove , pop , clear

remove()メソッド

リストの中から、引数の値と一致する最初の要素を削除します。
値が存在しない場合はエラーとなります。

Python list リスト

以下のスクリプトは、リストの中から指定の値の要素を全て削除します。

n = [1,2,3,4,3,5]
v = 3 #削除する値
while v in n:
    n.remove(v)

pop()メソッド

リストから指定したインデックスの要素を取り出し、かつ、その要素を削除します。

Python list リスト

clear()メソッド

リストを消去、つまり全ての要素を削除します。

Python list リスト

リストの値を調べるメソッド:index , count

index()メソッド

引数の値をリストから探しインデックスを返します。
値が存在しない場合はエラーになります。

Python list リスト

count()メソッド

リスト内に、引数の値が何個入っているかの件数を返します。

Python list リスト

以下のスクリプトは、リストの中から指定の値の要素を全て削除します。

n = [1,2,3,4,3,5]
v = 3 #削除する値
while n.count(v) > 0:
    n.remove(v)

リストを並べ替えるメソッド:sort , reverse , sorted関数

sort()メソッド

リストを並べ替えます。
公式ドキュメント - リスト型.sort
sort()メソッドは、リストをインプレース(その場所)で並べ替えます。
リストは返しません、戻り値はNoneです。
複数のデータ型が含まれたリスト(例えばstrとfloat)に対してsort()メソッドを実行した場合はエラーになります。

リスト.sort(*, key=None, reverse=False)

*
キーワードのみ引数となります。
呼び出し時に仮引数名が必須になります。
key
引数をとる関数を指定します。
リストのそれぞれの要素から比較キーを取り出すのに使います。
例、str.lower、str.upper
reverse
真偽値です。
True がセットされた場合、リストの要素は個々の比較が反転したものとして並べ替えられます。

数値リストの並べ替え
Python list リスト


文字列リストの並べ替え
アルファベット順ではなく、ASCIIコード順で並べ替えられます。
アルファベット順にする場合は、keyにstr.lowerまたはstr.upperを指定します。

Python list リスト

reverse()メソッド

リストを逆順にします。
リストは返しません、戻り値はNoneです。

Python list リスト

sorted()関数

イテラブルの要素を並べ替えた新たなオブジェクトを返します。

sorted(iterable, *, [key=None], [reverse=False])

keyとreverseはsortメソッドと同じ指定です。

Python list リスト


リストをコピーするメソッド:copy

リストのコピーを作成します。

Python list リスト

変数n1のリストをコピーして変数n2に代入しています。
コピーによって新たなlistオブジェクトが作成されます。
ただし、
copy()メソッドはshallowコピーです、deepコピーではありません。

リストの要素に他のオブジェクトを含む場合(複合オブジェクト)、
要素として含まれる他のオブジェクトは、コピー元とコピー先で同一のオブジェクトを参照します。

Python list リスト

ディープコピーを行うには、copyモジュールのdeepcopy()メソッドを使用します。

Python list リスト
※importについては、後々に詳しく説明します。

ここはオブジェクトに対する相応の理解が必要です。
もし理解しきれない場合は、
浅いコピーと深いコピーがあるということと、その挙動の違いを覚えておけば良いと思います。




同じテーマ「Python入門」の記事

第6回.for文とイテラブルオブジェクト
第7回.while文とデバッグ(ステップイン)
第8回.文字列操作(str型)
第9回.リスト(list型、配列)
第10回.タプル(tuple型、イミュータブル)
第11回.辞書(dict型)
第12回.組み込み関数一覧
第13回.関数の定義(def文)と引数
第14回.関数内関数(関数のネスト)とスコープ
第15回.lambda(ラムダ式、無名関数)と三項演算子
第16回.Pythonの引数は参照渡しだが・・・


新着記事NEW ・・・新着記事一覧を見る

CSV読み書き(csvモジュール)|Python入門(9月29日)
「Excel 4.0 マクロ」の使い方|VBA技術解説(9月28日)
CSV読み込みとopen()関数とwith文|Python入門(9月28日)
フォルダとファイルの一覧を取得(os,glob,pathlib)|Python入門(9月26日)
import文(パッケージ・モジュールのインポート)|Python入門(9月24日)
例外処理(try文)とexception一覧|Python入門(9月23日)
リスト内包表記|Python入門(9月22日)
Pythonの引数は参照渡しだが・・・|Python入門(9月21日)
lambda(ラムダ式、無名関数)と三項演算子|Python入門(9月20日)
関数内関数(関数のネスト)とスコープ|Python入門(9月18日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ