【追加/削除】Pythonのlist(リスト)の使い方を徹底解説

公開日:2020.12.02

スキルアップ
 

Pythonには多数の値を一つにまとめて管理するための、コレクションまたはコンテナと呼ばれるデータ型が複数存在します。list(リスト)はその一つで、他のプログラミング言語における配列のような使い方ができるデータ型です。

listには任意の型のデータを格納でき、格納された要素には順序が設定されています。これらの要素はインデックスを用いて指定することができ、listの要素は変更することが可能です。この利便性の高さから、他のコンテナと比較してPythonをコーディングする際に最も目にするのがlistでしょう。

今回はこのlistについて、サンプルコードとともに使い方を徹底解説していきます。

Pythonのlistとは

Pythonには多数の値や要素をまとめて管理するデータ型としてリスト、タプル、辞書、集合という4種類が提供されています。この4種類はコレクションまたはコンテナとも呼ばれているデータ型で、listは他のプログラミング言語における配列と性質が近く、配列として使用できます。また、listは格納された要素を変更できるため、柔軟性と利便性を兼ね備えています。そのため、最も多く使用されるコンテナとなっています。

Pythonをコーディングする際に頻繁に使用するため、特に言語を始めたばかりの初心者はlistの扱い方や挙動をしっかりと理解しておく必要があります。

それでは、listの基礎的な記述方法を見ていきましょう。

まず、listの要素は[ ]で表します。ids=[ ]で表記するとlistが作成されます。

# list作成
ids = [1,2,3,4,5]

次にlist内の要素を取り出してみましょう。ids[ ]で抜き取る要素の順序や部分を指定します。listの要素に割り振られた順序から、指定したn番目の要素を抜き出すことができます。

# listのn番目を取得
target_id = ids[n]

listは、指定したn番目からm番目の要素を抜き出すことができます。これはスライスという記述方法で、listを分割する手法の一種でもあります。

# listのnからm番目までを取得(スライス)
target_ids = ids[n:m]

listのn番目以降、最後まですべての要素を取得する場合次のようになります。

# listのnから最後までを取得
target_ids = ids[n:]

listの最初からn番目までの要素をすべて取得する場合は次のようになります。記述が似ているため、コロン( : )の位置に注意しましょう。

# listの最初からn番目までを取得
target_ids = ids[:n]

Pythonのlistの使い方1 - 入門

要素の参照方法を学んだところで、実際にlistを使用する際の記述方法を見ていきましょう。listを使う時に特に意識して覚えておきたいのが、listの要素を操作する追加と削除です。

要素を操作して任意の要素を追加・削除ができるのがlistの特徴であり、よく似ているtuple(タプル)との違いでもあります。

それでは実際にサンプルコードを見ながらlistの追加と削除について確認していきましょう。

追加(append / insert)

listが持つ要素に対し、任意の要素を指定した場所に追加、挿入する操作は頻繁に発生します。追加を行う演算子はappendとinsertの2つで、それぞれ操作の特徴が異なります。

append

appendはlistの末尾に指定した数値や文字列を追加します。要素を単体で追加する場合は、既存のlistに結合されます。listを追加する場合、listの末尾に新しいlistが追加されますが、結合はされません。

ids = [1,2,3,4,5]
ids.append(6) # [1,2,3,4,5,6] となり6が追加される
ids.append([6,7,8]) # [1,2,3,4,5,[6,7,8]] [6,7,8]が追加される(結合はされない)

insert

insertは(n,m)の形を用いてlistのn番目に要素を追加します。append同様に要素が単体の場合は既存のlistに結合されますが、listを追加する場合は結合されません。

ids.insert(0,6) # [6,1,2,3,4,5] 0番目に6が追加される
ids.insert(-1,6) # [1,2,3,4,5,6] -1=最後に6が追加される
ids.insert(0,[6,7,8] ) # [[6,7,8],1,2,3,4,5] 0番目に[6,7,8]が追加される(結合はされない)

削除(clear / remove / del / pop)

listが持つ要素に対し、指定した任意の要素を削除する操作です。例えば、処理が終わったため順次配列から消したい場合や、listの大部分を消去したい場合などに使用します。

削除は、挙動が異なるclear、remove、del、popの4種類の演算子が存在します。順番に見ていきましょう。

clear

clearはPython3.3から追加された機能で、listに格納されているすべての要素を削除します。listを一旦消去して新しいlistを作成したい場合などに使用されます。

ids = [1,2,3,4,5]
ids.clear()

remove

removeは指定した要素をlistから削除します。このコードでは1から5まである要素から1だけを削除します。また、同じ値を持つ要素が複数ある場合は、listの先頭から参照して最初の要素だけを削除します。

ids = [1,2,3,4,5]
ids.remove(1)

del

delは指定した任意の範囲の要素を削除します。削除する範囲はdel ids [n]またはdel ids [n:m]で指定します。n番目の要素を削除するため、nを0とした場合は最初の要素が削除されます。

del ids [0]

-1は最後のデータを指します。nを-1とした場合、listの最後の要素を削除します。

del ids[-1]

n:mで範囲を指定できます。この場合0-2番目のデータを削除します。

del ids[0:2]

pop

popは指定した任意の順序にある要素を取り出して変数idに挿入し、取り出した要素をlistから削除します。listに対して要素を参照し、重複して処理を行わない場合などに使用されます。

popではid = ids.pop(n)で要素を指定します。nを指定するとlistの指定された順序にある要素を参照して取り出し、変数idに挿入してlistから削除します。この場合は0なので0番目、listの最初にある値が参照されます。

id = ids.pop(0)

-1はlistの最後の要素を指します。この場合、listの最後にある要素を参照してlistから取り出し、変数idに挿入してlistから削除します。

id = ids.pop(-1)

検索(in / index)

listに対する検索には、inとindexという挙動の異なる2種類の演算子があります。それぞれどのような検索なのか見ていきましょう。

in

inはある要素がlistの中にあるかどうかを検索する演算子です。以下のコードでは1から5までの5つの数字を要素として持つlistに対して、2と6が存在しているかそれぞれ参照しています。2はlistの要素にあるのでTrueが返り、6はlistの要素にないのでFalseが返ります。

ids = [1,2,3,4,5]
2 in ids # True
6 in ids # False

index

indexはある要素のlist内でのインデックス(順序)を検索したい場合に使用する演算子です。以下のコードでは、1から5までの5つの数字を要素として持つlistに対して、1のインデックスを参照しています。

ids = [1,2,3,4,5]
ids.index(1) # 数値1は先頭なので、インデックスである 0 が返ってくる

カウント(len)

lenはlistにある要素の数をカウントする演算子です。追加と削除を繰り返しても、現在listにいくつの要素があるのかを簡単に確認できます。

以下のコードではlenでlistの要素の数を参照しています。この場合、listには5つの数字が要素として含まれているため、5が値として返ります。

ids = [1,2,3,4,5]
len(ids)

Pythonのlistの使い方2 - 応用

listの基本的な挙動と使い方を理解したところで、続いて応用的な操作を見ていきましょう。ここでは、listに含まれる要素に異なるlistを結合させたり、2つ以上のlistに分割する処理について解説します。

結合(+ / append / join)

異なるリストの要素を一つのlistに結合したり、listに含まれる配列を一つに結合する演算子です。

結合には複数のlistを一つに結合する+、extendと、listの要素を一つに結合するjoinがあります。

+ / extend

+とextendは複数のlistを一つに結合します。

+はids1とids2を+で結合し、ids3という新しいlistを生成しています。

このコードを実行すると、ids3 = [1,2,3,4,5,6,7,8,9,10] というlistが生成されます。

ids1 = [1,2,3,4,5]
ids2 = [6,7,8,9,10]
// + で複数配列を結合
ids3 = ids1 + ids2

extendはids1にids2を結合し、idsという一つのlistにしています。

このコードを実行するとids = [1,2,3,4,5,6,7,8,9,10] というlistになります。

// extend で複数配列を結合
ids1.extend(ids2)

join

joinはlistが持つ要素の配列を一つに結合する演算子です。実際のサンプルコードを見てみましょう。次のサンプルコードでは、ids4というリストが持つa,b,cの3つの要素を結合し、abcという文字列を生成しています。

joinはオブジェクトの文字列表現を定義するための特殊メソッドであるstrのメソッドなので、文字列 ""のメソッドとして呼び出し、 ""に結合する形で abcをjoinしています。

// join で配列を一つに結合
ids4 = ["a","b","c"]
"".join(id4)

分割(スライス)

listの要素を分割する記述方法です。前述したスライスを使用します。

次のコードでは1から5までの5つの数字を要素として持つids1に対して、[:3]で3までを分割してids2というlistを生成しています。この場合、ids2は[1,2,3]という要素を持つlistになります。

また、[3:]で3より後ろを分割してids3というlistを生成しています。この場合、ids3は[4,5]という要素を持つlistになります。

ids1 = [1,2,3,4,5]
ids2 = ids[:3] # [1,2,3]
ids3 = ids[3:] # [4,5]

分割には他の記述方法もあり、例えばNumPy環境でしか動作しませんが、より高性能な配列の分割ができるarray_splitなどもあります。

listとtuple(タプル)の違い

listと動作が似ているものとして tuple(タプル)というデータ型があります。この2つの違いは、持っている要素が変更できるかできないかにあります。listはミュータブル(変更可能)、tupleはイミュータブル(変更不可)なデータ型です。

なおtupleは変更したくない、またはされたくないデータを表現するものなので、連結は可能ですが、tupleに対する要素の追加や挿入、変更、削除は行えません。

どうしても変更が必要な場合、tupleを一度listに変換し、変更を加えてから再びtupleに戻すことで要素の書き換えを行います。

なお、tupleは次のように記述します。

ids = (1,2,3,4,5)

よく使うPythonのlistをマスターしよう!

Pythonのプログラミングにおいて、listは必須とも言えるデータ型です。多くのデータを処理するためにはlistを使って効率よく記述する必要があります。そのため、listの使い方をマスターすることで、入門よりもさらに踏み込んだレベルでPythonをコーディングできます。

listをマスターして、Pythonに対する理解を深め、脱初心者を目指してみてはいかがでしょうか。

なおAKKODiSでは、Pythonによる開発案件の求人を多数ご用意しています。Pythonを学び、ステップアップしてエンジニアを目指したいという方は、まずは現在の状況をご相談ください。

(2020年12月現在)

AKKODiSコンサルティングに関するお問い合わせ