[python]リスト内包表記

リスト内包表記

あるリストがありそれを元に新しいリストを作成するにはfor文を使うと次のようになります。
#初期化
list_1=[]
for i in range(5):
	list_1.append(i**2)
print(list_1) #[0, 1, 4, 9, 16]
これをリスト内包記法を使うと次のように1行で表せます。
[式 for 変数名 in イテラブルオブジェクト]
具体的には次のようになります。
print([i**2 for i in range(5)]) #[0, 1, 4, 9, 16]
次のようにもできます。
print([i+i for i in ['a','b','c']]) #['aa', 'bb', 'cc']

if文を使った内包表記

内包表記で3項演算子を使うと次のようになります。
print(["even" if i%2==0 else "odd" for i in [0,1,2] ] #['even', 'odd', 'even'])
これはfor文で取り出した値を3項演算子を使って処理をさせます。
3項演算子なのでelseを省くことはできません。
またif文付き内包表記でリストの抽出ができます。
print([i**2 for i in [0,1,2,3,4,5] if i<4] #[0, 1, 4, 9])
これは内包表記で作成したもののうちif文が真になる値だけが有効になります。

map関数でリスト作成

あるリストから新しいリストの作成はmap関数を使ってもできます。
print(list(map(lambda x: x * x,[0,1,2,3,4]))) #[0, 1, 4, 9, 16]
map関数はmapクラスを返すのでリスト型に変換する必要があります。
これは内包表記を使って
print([i**2 for i in [0,1,2,3,4]]) #[0, 1, 4, 9, 16]
と同じです。

filter関数でリスト抽出

あるリストから要素を抽出するにはfilter関数を使っても出来ます。
print(list(filter(lambda x: x<4,[0,1,2,3,4]))) #[0, 2, 4]
filter関数はfilterクラスを返すのでリスト型に変換する必要があります。
これはif文付きの内包表記を使って
print([i for i in [0,1,2,3,4] if i%2==0]) #[0, 2, 4]
と同じです。

ページ情報
タイトル
[python]リスト内包表記
URL
https://www.nomuramath.com/tunko3we/
SNSボタン