LoginSignup
6
17

More than 1 year has passed since last update.

Pythonの内包表記 まとめ

Last updated at Posted at 2021-05-29

はじめに

初投稿です。基本は自分自身の備忘録としてアウトプットしていこうと考えていますので、駄文になりますがご容赦ください。

この記事の趣旨

内包表記が使えると簡素でコードが見やすく、何よりカッコいいコードに見えます。
今回は4種類の内包表記について備忘録としてまとめます。

今回のトピック

1.リスト内包表記
2.辞書内包表記
3.集合内包表記
4.ジェネレータ式

1.リスト内包表記

要件

1〜5の数値が入ったタプルをfor文でまわし、順に[hoge]というリストに格納する動作を行う

for文を使ったリストへの追加
code
tpl = (1, 2, 3, 4, 5)
hoge = []
for i in tpl:
    hoge.append(i)
内包表記

上記のコードを内包表記にしたもの

code
tpl = (1, 2, 3, 4, 5)
hoge = [i for i in tpl]
補足

条件分岐をifで追加できる
下記のコードは偶数のみ追加する場合。上記の文末にifで条件式を書けばOK

code
tpl = (1 ,2, 3, 4, 5)
hoge = [i for i in tpl if i % 2 == 0]

2.辞書内包表記

要件

例として、曜日ごとの朝食を辞書に登録する。
具体的には曜日をキー、メニューを値として登録

for文を使用した辞書への追加
code
day = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
menu = ['bread', 'oat meal', 'cereal', 'bacon', 'omelet','ham', 'waffle']
dic = {}
for d, m in zip(day,menu):
    dic[d] = m
内包表記

上記のコードを内包表記にしたもの

code
day = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
menu = ['bread', 'oat meal', 'cereal', 'bacon', 'omelet','ham', 'waffle']
dic = {d: m for d, m in zip(day, menu)}

3.集合内包表記

要件

range関数で数値を10回集合に追加する

for文を使用した集合への追加
code
s = set()
for i in range(10):
    s.add(i)
内包表記
code
s = {i for i in range(10)}

これはとてもシンプルですね!
{}で囲うので辞書型に書き方が似ている点が注意です。

4.ジェネレータ式

要件

1から10までの数値を出力するジェネレータ

for文を使用した辞書への追加
code
def g():
    for i in range(10):
        yeild i
g = g()
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
#出力結果
0
1
2
3
4
5
6
7
8
9
内包表記

上記のコードを内包表記にしたもの
他のコードと比べても非常にスリムになったと思います。
next()での表示もできます。

code
g = (i for i in range(10))
for x in g:
    print(x)
#出力結果
0
1
2
3
4
5
6
7
8
9

まとめ

4種類の内包表記についてまとめました。
内包表記が使えるとコードが読みやすく、記述も少なくてすみますのでぜひ使ってみてはいかがでしょうか?
ジェネレータはいまいち実務での使い所がわからないので、今後の学習で取り入れていければと考えています。
最後までお付き合い頂きありがとうございました。

6
17
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
17