見出し画像

Python3 | ③内包表記

こんにちは、現役理系大学生のShogoです!

今回は、Python3超入門講座第3弾です!

前回の記事を読んでいない方は、こちらからご覧ください。



今回の内容は、「内包表記」です。

内包表記を用いることで、コードの短縮に繋がります。きれいなコードをつくるために、ぜひとも覚えておきたい内容です。

それでは、いきましょう!

開発環境

開発環境は、VScodeです。

VScodeでのPythonの実行方法は、以下のURLを参考にしてみてください。


3-1 リスト内包表記

画像2

リスト内包表記には、リストを生成するための行を少なくする役割があります。また、処理速度が早いというのも利点のひとつです。

例えば、下記のタプルの要素をリストに追加したいとします。

t = (1, 2, 3, 4, 5)

このとき、forとappendを学習している人であれば、次のように書くでしょう。

t = (1, 2, 3, 4, 5)

l = []
for i in t:
   l.append(i)

print(l) # [1, 2, 3, 4, 5]


復習:forとappend

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

for i in a: # ←aの要素をひとつずつiに代入
   print(i) # iを出力

# 1
# 2
# 3
# 4
# 5

forは、繰り返し処理をするときに用いられます。

つまり、forのあとに書いたコードを反復処理するわけです。

b = [1, 2, 3]

print(b) # [1, 2, 3]

b.append(4)
b.append(5)

print(b) # [1, 2, 3, 4, 5]

appendは、リストに新しい要素を追加するときに用いられます。

例えば、上記のように、appendを使うことで、[1, 2, 3]のリストに4, 5を加えて、[1, 2, 3, 4, 5]のリストを作ることができます。


✅続き

リスト内包表記は、forとappendを使った文を1行で記述することができます。

t = (1, 2, 3, 4, 5)

l = [i for i in t]
print(l) # [1, 2, 3, 4, 5]

このように出力結果は、最初のコードと同様であることがわかります。したがって、appendで要素を追加する必要がありません。

[i for i in t]は、tからiに取り出して、そのままiというリストに入れているというイメージです。


✅応用

また、forだけでなく、その後にも文章を続けることが可能です。

例えば、先程のaのタプル(1, 2, 3, 4, 5)から、偶数のみをリストにいれたいとき、通常次のように書きます。

t = (1, 2, 3, 4, 5)

l = []
for i in t:
   if i % 2 == 0:
       l.append(i)

print(l) # [2, 4]

このように書かなくても、リスト内包表記を用いることで、かんたんに書くことができます。

t = (1, 2, 3, 4, 5)

l = [i for i in t if i % 2 == 0]
print(l) # [2, 4]

このように短い処理であれば、リスト内包表記を用いることで、シンプルにコードを記述することができます。


3-2 辞書内包表記

画像3

リスト内包表記があるように、辞書内包表記というものもあります。これもシンプルに書くために用いられます。

例えば、果物と色のリストを辞書型にまとめるとすると、次のように書けます。

f = ['apple', 'banana', 'pear']
c = ['red', 'yellow', 'green']

d = {}
for x, y in zip(f, c):
   d[x] = y

print(d) # {'apple': 'red', 'banana': 'yellow', 'pear': 'green'}


復習:zip関数

A = ['1', '2', '3']
B = ['one', 'two', 'three']
C = ['壱', '弐', '参']

for a, b, c in zip(A, B, C):
   print(a, b, c)
   
# 1 one 壱
# 2 two 弐
# 3 three 参

zip関数は、一番はじめの要素(A '1', B '2', C '3')を一番初めの変数(a, b, c)にそれぞれ入れて実行するものです。


✅続き

この文もリスト内包表記と同じように、かんたんにできます。

f = ['apple', 'banana', 'pear']
c = ['red', 'yellow', 'green']

d = {x: y for x, y in zip(f, c)}

print(d) # {'apple': 'red', 'banana': 'yellow', 'pear': 'green'}

xとyを、x: y とkey, valueの形にしてあげると、辞書内包表記を記述することができます。


3-3 集合内包表記

画像4

集合内包表記もリスト内包表記と書き方は同じです。

集合についてわからない場合は、以前の記事をご覧ください。


例えば、0から4までの値を集合として記述するとします。

s = set()

for i in range(5):
   s.add(i)
   
print(s) # {0, 1, 2, 3, 4}

range(5)は、数字を5つ記述するものです。pythonでは、数字は0から始まっているのが注意点です。また、addは数字を加えていくものです。

このとき集合内包表記を用いると、次のように書けます。

s = {i for i in range(5)}
print(s) # {0, 1, 2, 3, 4}

最初のコードに比べて、随分シンプルになったと思います。


3-pracitce

問題:次のコードをリスト内包表記を用いて、かんたんにしなさい。

t1 = (1, 2, 3, 4, 5)
t2 = (6, 7, 8, 9, 10)

l = []
for i in t1:
   for j in t2:
       l.append(i * j)
       
print(l) # [6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 18, 21, 24, 27, 30, 24, 28, 32, 36, 40, 30, 35, 40, 45, 50]



答え:

t1 = (1, 2, 3, 4, 5)
t2 = (6, 7, 8, 9, 10)

l = [i * j for i in t1 for j in t2]

print(l) # [6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 18, 21, 24, 27, 30, 24, 28, 32, 36, 40, 30, 35, 40, 45, 50]


まとめ

画像1

今回は、「内包表記」を学習しました。

内包表記を使うことで、数行にわたるコードをシンプルにすることができます。しかし、なんでも1行にまとめてしまうと、見ずらいコードになってしまうので、使いすぎは厳禁です!

今回紹介したもの以外にも、内包表記はあるので、気になった方は調べてみてください!


質問や訂正があれば、遠慮なくこの記事にコメント、もしくは、TwitterにDMをしてください!(@shogo_python)

今回の記事が"いいね!"と思ってくれた方は、スキとフォローをよろしくおねがいします!

では、またの機会にお会いしましょう!

今回のおすすめ書籍


Python3 超入門講座 一覧はこちらから