Pythonで配列(list)の要素を全て書き換えるコード3選

python コンピュータ
python

配列(list)で全ての要素を一括書換え方法のうち、よく使いそうな3つのコードを試してみました。

forループを使う方法

my_list = [1, 2, 3, 4, 5]

for i in range(len(my_list)):
  my_list[i] = my_list[i] + 1  # 各要素に1加算にする

print(my_list) 
# 出力: [2, 3, 4, 5, 6]

他の言語でも昔からよくあるforですが、pythonのforは範囲の条件とインデックス変数のカウントアップの処理をrange()で行います。

リスト内包表記を使う方法

my_list = [1, 2, 3, 4, 5]

my_list = [i + 1 for i in my_list]  # 各要素に1加算

print(my_list)
# 出力: [2, 3, 4, 5, 6]

リスト内包表記は上記のforの変形ですが結果を、list()の初期値にし生成しなおしています。
厳密には既存の配列(list)の要素の書き換えでは無いですが、同じ結果が得られます。

1行で表現できるので使い方をマスターしたいと思います。

map関数を使う方法

my_list = [1, 2, 3, 4, 5]

my_list = list(map(lambda x: x + 1, my_list))  # 各要素に1加算する

print(my_list) 
# 出力: [2, 3, 4, 5, 6]

リスト内包をmapとlambdaで置き換えたように見えます。
lambdaで各要素を加算処理を行い結果をmap()で反復可能なオブジェクトとし、それを初期値として配列(list)を生成しています。
単純な加算だけだと回りくどい感じがしますが、lambdaは無名関数なのですが条件式を加えることでフィルターとして機能させることも出来ます。

my_list = [1, 2, 3, 4, 5]

my_list = list(filter(lambda x: x % 2 == 0, my_list))

print(my_list) 
# [2, 4]

感想

個人的にforを使う方法ばかり使っていたので、その他の方法も試してみたのですが、同じ結果を得られるとしても目的に応じて使いどころが異なると感じました。

基本はforでコード次第で柔軟性が高い反面コードが長くなりがちです。
リスト内包表記は要素の一斉書換専用に使いたいと思います。
map()を使う方法は正直理解できていません。動作することは確認していますが、無名関数のlambdaとmapやfilterの関係性についてオイオイ学びたいと思います。

コメント