- Python のリストを使いこなせるようになりたい!
このような方に向けて書きました。
プログラミングを始めて感じる関門の一つがリストの操作です。
とはいえ一度要領がわかってしまえば、リストの操作はとても簡単。
本記事では実務で使うテクニックを中心に、Python のリスト操作方法をまとめました。
目次がリンクになっています。
だいぶ記事のボリュームがあるので、目次をクリックして情報にアクセスしてください。
「基本操作」編
以下のような「よく使うリスト操作方法」をご紹介します。
- 特定の要素が含むかを調べる
- 空のリストの作り方
- リストの要素数を取得する方法
- タプルをリストに変換
頻出のテクニックなので、早めに理解しておきましょう。
特定の要素が含むかを調べる
リスト内に特定の要素を含むかどうかはin
を使います。
戻り値はTrue
またはFalse
です。
is_include = "iPhone" in ["iPhone", "iMac", "iCloud"]
print(is_include)
# 出力結果
# True
これを利用してif
文で条件分岐させることが頻繁に行われます。
my_bag = ["iPhone", "iMac", "iCloud"]
if "iPhone" in my_bag:
print("Ready!")
else:
print("I forgot my iPhone...")
# 出力結果
# Ready!
空のリストの作り方
からのリストを作成する場合には、変数に[]
を指定します。
empty_list = []
append()
で要素を追加していく際に、まず空のリストを用意することがよくあります。
リストの要素数を取得する方法
リストの要素数はlen()
メソッドで取得できます。
target_list = ["iPhone", "iMac", "iCloud"]
size = len(target_list)
print("size: ", size)
# 出力結果
# size: 3
使い時としては、以下のようなケースがあります。
- 空のリストか確認
- 狙った通りの要素数か確認
- ループ回数の制御
結構頻繁に利用する、便利な機能です。
タプルをリストに変換
タプルだと要素の変更が効かないので、リストにしたい場合があります。
この場合、タプルに対してlist()
関数を使いましょう。
target_tupple = ("iPhone", "iMac", "iCloud")
target_list = list(target_tupple)
print(target_list)
# 出力結果
# ['iPhone', 'iMac', 'iCloud']
「関数適用」編
リストの全要素に対して特定の処理をさせる関数が用意されています。
map()
関数:全要素に関数を適用filter()
関数:条件に合致した要素のみを残す
データ分析などの文脈で使われることが多いので、ぜひマスターしていきましょう!
map()
関数の使い方
リストの全要素に対して特定の関数を適用し、新たなリストを作る関数です。
基本的な文法は以下の通り。
map(function, list)
list
にあたる部分には辞書やタプルなども渡せますが、ここではリストに絞って解説します。
例えばリストの全要素を2倍したい場合には、以下です。
def double(x):
return x * 2
numbers = [1, 2, 3, 4, 5]
result = map(double, numbers)
print("result: ", list(result))
# 出力結果
# result: [2, 4, 6, 8, 10]
複数のリストに対して関数を適用することもできます。
numbers1 = [1, 2, 3]
numbers2 = [4, 5, 6]
result = map(lambda x, y: x + y, numbers1, numbers2)
print("result: ", list(result))
# 出力結果
# result: [5, 7, 9]
上記ではそれぞれのリストから要素を一つずつ取り出し、合計します。
map()
関数とlambda
を併用する方法
一般的にmap()
関数はラムダ関数と併用されることが多いです。
全要素を2倍するコードをラムダ関数で表現したものが以下になります。
numbers = [1, 2, 3, 4, 5]
result = map(lambda x: x * 2, numbers)
print("result: ", list(result))
# 出力結果
# result: [2, 4, 6, 8, 10]
ラムダ式の部分を要素分解して解説します。
lambda x:
: 引数をx
とする関数を定義x * 2
: 関数で実行される計算式
一般的には関数名(引数):
がlambda 引数:
に置き換わった形と考えるとわかりやすいです。
filter()
関数の使い方
リストの全要素から、特定の条件に合致するものだけを抽出する関数です。
基本的な使い方は以下の通り。
filter(function, list)
function
にはブール値(True
, False
)を返す関数を用意してください。
以下はリストから偶数だけを抽出するコード例です。
def is_even(x):
return x % 2 == 0
numbers = [1, 2, 3, 4, 5, 6]
filtered_numbers = filter(is_even, numbers)
print("filtered_numbers: ", list(filtered_numbers))
# 出力結果
# [2, 4, 6]
つまり、is_even()
関数でTrue
を返したもののみ抽出される流れとなります。
filter()
関数とlambda
を併用する方法
lambda
と併用する場合には短いコードで表現できます。
numbers = [1, 2, 3, 4, 5, 6]
filtered_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(filtered_numbers))
filter()
関数の第一引数をlambda
に置き換えた形ですね。
「要素追加」編
元々あるリストに要素を追加する場合、以下のバリエーションがあります。
- 末尾に追加
- 指定位置にを挿入
- 他のリストを連結
- 指定位置に他のリストを挿入
それぞれ、解説します。
末尾に追加
リストの最後に要素を追加したい場合にはappend()
メソッドを使います。
コード例を示します。
target_list = ["iPhone", "iMac", "iCloud"]
target_list.append("MacBook")
print(target_list)
# 出力結果
# ['iPhone', 'iMac', 'iCloud', 'MacBook']
リストの最後に “MacBook” が追加されました。
指定位置にを挿入
末尾以外に要素を追加したい場合にはinsert()
メソッドを使います。
第一引数に挿入先のインデックス番号を指定します。
target_list = ["iPhone", "iMac", "iCloud"]
target_list.insert(1, "MacBook")
print(target_list)
# 出力結果
# ['iPhone', 'MacBook', 'iMac', 'iCloud']
上記の通り、”MacBook” がインデックス番号1
(2番目)に追加されました。
同じ要領でリストの先頭に要素を追加したい場合には、第一引数に0
を渡せば OK です。
他のリストを連結
リストとリストを結合する場合にはextend()
メソッドを使います。
original_list = ["iPhone", "iMac", "iCloud"]
additional_list = ["MacBook", "AppleWatch"]
original_list.extend(additional_list)
print(original_list)
# 出力結果
# ['iPhone', 'iMac', 'iCloud', 'MacBook', 'AppleWatch']
出力結果は以下になります。
extend()
の引数に渡したリストが末尾に追加される形になります。
ちなみに、extend()
の代わりに+
を使っても OK です。
original_list = ["iPhone", "iMac", "iCloud"]
additional_list = ["MacBook", "AppleWatch"]
original_list += additional_list
print(original_list)
# 出力結果
# ['iPhone', 'iMac', 'iCloud', 'MacBook', 'AppleWatch']
ただし、間違えてappend()
関数を実行してしまいます。
original_list = ["iPhone", "iMac", "iCloud"]
additional_list = ["MacBook", "AppleWatch"]
original_list.append(additional_list)
print(original_list)
# 出力結果
# ['iPhone', 'iMac', 'iCloud', ['MacBook', 'AppleWatch']]
上記のように、変な出力結果になってしまいました。
指定位置に他のリストを挿入
他のリストを指定した位置に挿入するには、スライスを使います。
original_list = ["iPhone", "iMac", "iCloud"]
additional_list = ["MacBook", "AppleWatch"]
original_list[2:2] = additional_list
print(original_list)
# 出力結果
# ['iPhone', 'iMac', 'MacBook', 'AppleWatch', 'iCloud']
元のリストのインデックス番号2
番(つまり最初から数えて3番目)に、追加したいリストが挿入されたことがわかります。
スライスとして異なる番号を指定すると、指定したインデックス番号の要素と追加したいリストが置き換わります。
original_list = ["iPhone", "iMac", "iCloud"]
additional_list = ["MacBook", "AppleWatch"]
# 元のリストの 1~2 と追加リストに置き換える
original_list[1:2] = additional_list
print(original_list)
# 出力結果
# ['iPhone', 'MacBook', 'AppleWatch', 'iCloud']
「要素削除」編
元々あるリストに要素を削除する方法には、以下のバリエーションがあります。
- すべて削除
- 特定の要素を削除して値取得
- 特定の値を削除
- 範囲指定して削除
それぞれ解説していきます。
すべて削除
リスト内を空っぽにするには、clear()
メソッドを使います。
original_list = ["iPhone", "iMac", "iCloud"]
original_list.clear()
print(original_list)
# 出力結果
# []
特定の要素を削除して値取得
pop()
メソッドに削除したいインデックス番号を渡すと、要素が削除されて戻り値として削除された要素が返ってきます。
original_list = ["iPhone", "iMac", "iCloud"]
element_1 = original_list.pop(1)
print("element_1:", element_1)
print("original_list", original_list)
# 出力結果
# element_1: iMac
# original_list ['iPhone', 'iCloud']
最後尾にある要素を取得するには、インデックス番号として-1
を指定すれば OK です。
original_list = ["iPhone", "iMac", "iCloud"]
element_minus1 = original_list.pop(-1)
print("element_minus1:", element_minus1)
print("original_list", original_list)
# 出力結果
# element_minus1: iCloud
# original_list ['iPhone', 'iMac']
マイナスで指定すると、後ろ側から要素を取得してくれます。
-2
とすれば、後ろから二番目の要素を取得します。
特定の値を削除
値を直接指定して削除するにはremove()
メソッドを使います。
original_list = ["iPhone", "iMac", "iCloud", "iPhone"]
original_list.remove("iPhone")
print("original_list", original_list)
# 出力結果
# original_list ['iMac', 'iCloud', 'iPhone']
ただし、この方法では最初に見つかった要素しか削除しません。上記の例でも0
番目の “iPhone” は削除されたものの、最後尾にある “iPhone” は残ったままです。
すべての値を削除するには、次のようにリスト内包表記を用います。
original_list = ["iPhone", "iMac", "iCloud", "iPhone"]
new_list = [elm for elm in original_list if elm != "iPhone"]
print("new_list", new_list)
# 出力結果
# new_list ['iMac', 'iCloud']
リスト内包表記は別記事で詳しく解説しました。書き方に自信がない方は合わせてご覧になってみてください。
範囲指定して削除
インデックス番号の範囲を指定して要素を削除するにはdel
を使います。
original_list = ["iPhone", "iMac", "iCloud", "iPhone"]
del original_list[0:2]
print("original_list", original_list)
# 出力結果
# original_list ['iCloud', 'iPhone']
スライスの場合には右側に書いた2
を含みません。そのため、上記の例ではインデックス番号0
〜1
番目が削除されることになります。
もちろん、通常のスライスの機能が使えますので以下のような範囲選択も可能です。
original_list = ["iPhone", "iMac", "iCloud", "iPhone"]
del original_list[-2:]
print("original_list", original_list)
# 出力結果
# original_list ['iPhone', 'iMac']
まとめ
リストの操作は以下のようなものがありました。
- 基本的な操作
- 全要素に関数を適用
- 要素を追加
- 要素を削除
今回の記事にあるものを理解することで、基本的なリスト操作は困らないレベルになるかと思います。
ご不明点などはコメント欄からお気軽にどうぞ!
本ブログでは他にも Python に関する記事をアップしています。ご興味のある方は以下のリンクからどうぞ。
コメント