[Python]リストの要素全てに処理を行いたいメモ


例えばa=[1,2,3,4,5]などのリストに対して、中の要素それぞれに1を足したり2を掛けたりする方法についての羅列 & 自分用メモです。

今回は、以下の配列を例に操作を行います。全ての要素を2倍することを考えます。

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

# 完成形 -> a = [2, 4, 6, 8, 10]

頑張って全部書く

a[0] *= 2
a[1] *= 2
a[2] *= 2
a[3] *= 2
a[4] *= 2

print(a)
# -> [2, 4, 6, 8, 10]
  • ......

上の操作をループで行う

for i in range(len(a));
    a[i] *= 2
  • さっきよりは簡潔。

ちなみに、for num in a:num *=2を処理しても、元の配列の要素には反映されないので注意。
別で配列を作ってappendしたりするならfor num in a:でも可?

map関数を利用する

def func(x):
   return x*2

a = list(map(func, a))

# もしくは
a = list(map(lambda x: x*2, a))
  • map関数と関数、もしくはlambda式を用いる方法
  • aへの上書き可能。
  • 返り値はmapオブジェクトのため、配列にしたい場合はlistで受け止める必要がある。

リスト内包表記を利用する

a = [x*2 for x in a]
  • for文を内包表記した形。
  • aへの上書き可能。
  • 簡潔!

結局

2を掛けたり1を足すぐらいの操作だったらリスト内包表記が最も簡潔だけど、複雑な処理だったりすると、別で関数を定義できてループが要らないmap関数が便利な気がします。

他にも良い方法があれば是非共有してください。