例えば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関数が便利な気がします。
他にも良い方法があれば是非共有してください。