◾️はじめに
今更ながら、Pythonのリスト内包表記(List comprehensions) について扱う。
目次
【1】リスト内包表記(List comprehensions) 1)例 【2】リスト内包表記の種類 1)配列(list) 2)集合(set) 3)辞書(dict) 【3】リスト内包表記の覚え方 1)通常のforループから書き換える練習をする 2)if文が入るパターンも段階的に慣れる 3)日本語で構文を「翻訳」して考える 4)「型」だと思って暗記する
【1】リスト内包表記(List comprehensions)
* 既存のリストから新しいリストを作るためのリスト作成方法 => どう言ったものかは、具体的にみた方が早い
1)例
# ↓のような書き方を「リスト内包表記(List comprehensions)」という list = [x**2 for x in range(10)] print(list) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] # ネストも可能 list2 = [(x, y) for x in range(2) for y in range(3)] print(list2) # (0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
【2】リスト内包表記の種類
1)配列(list)
results = [x for x in iterable]
2)集合(set)
results = {x for x in iterable}
3)辞書(dict)
results = {k: v for k, v in iterable}
【3】リスト内包表記の覚え方
* 「覚え方のコツ」をChatGPTに聞いてみて、良かったものを一部抜粋
1)通常のforループから書き換える練習をする
* まずはforループで処理を書く → それを内包表記に変換する練習が効果的 =>「何を作るか(i * 2)」 + 「どこから取るか(for i in range(5))」 という構造に注目!
例: 通常のforループ
result = [] for i in range(5): result.append(i * 2)
リスト内包表記
result = [i * 2 for i in range(5)]
2)if文が入るパターンも段階的に慣れる
* for の後に if をつけることで フィルタリングができる。
例
# 偶数だけ取りたい場合 result = [i for i in range(10) if i % 2 == 0]
3)日本語で構文を「翻訳」して考える
[i * i for i in range(5) if i % 2 == 0]
これを日本語で考えると
*「0から4までの数字のうち偶数だけを選んで、それらを2乗するリスト」 => 0から4までの数字(i in range(5))のうち 偶数だけを選んで(if i % 2 == 0)、 それらを2乗する(i * i)
4)「型」だと思って暗記する
* 次の「型」を覚えておくと便利
基本形
[式 for 変数 in イテラブル]
フィルタ付き
[式 for 変数 in イテラブル if 条件]
入れ子(ネスト)
[式 for 変数1 in イテラブル1 for 変数2 in イテラブル2]
関連記事
Python ~ 基本編 / リスト ~
https://dk521123.hatenablog.com/entry/2019/10/12/084943
Python ~ 基本編 / スライス操作 ~
https://dk521123.hatenablog.com/entry/2020/11/14/000000
Python ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2019/10/12/075251
Python ~ 基本編 / 型指定・Typing ~
https://dk521123.hatenablog.com/entry/2021/12/23/231559
Python ~ 基本編 / ラムダ lambda ~
https://dk521123.hatenablog.com/entry/2019/09/23/000000
Python ~ 基本編 / リスト・あれこれ ~
https://dk521123.hatenablog.com/entry/2020/11/01/000000
Python に関する資格
https://dk521123.hatenablog.com/entry/2019/12/17/225829