Python3 | ③内包表記
こんにちは、現役理系大学生のShogoです!
今回は、Python3超入門講座第3弾です!
前回の記事を読んでいない方は、こちらからご覧ください。
今回の内容は、「内包表記」です。
内包表記を用いることで、コードの短縮に繋がります。きれいなコードをつくるために、ぜひとも覚えておきたい内容です。
それでは、いきましょう!
開発環境
開発環境は、VScodeです。
VScodeでのPythonの実行方法は、以下のURLを参考にしてみてください。
3-1 リスト内包表記
リスト内包表記には、リストを生成するための行を少なくする役割があります。また、処理速度が早いというのも利点のひとつです。
例えば、下記のタプルの要素をリストに追加したいとします。
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 辞書内包表記
リスト内包表記があるように、辞書内包表記というものもあります。これもシンプルに書くために用いられます。
例えば、果物と色のリストを辞書型にまとめるとすると、次のように書けます。
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 集合内包表記
集合内包表記もリスト内包表記と書き方は同じです。
集合についてわからない場合は、以前の記事をご覧ください。
例えば、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行にまとめてしまうと、見ずらいコードになってしまうので、使いすぎは厳禁です!
今回紹介したもの以外にも、内包表記はあるので、気になった方は調べてみてください!
質問や訂正があれば、遠慮なくこの記事にコメント、もしくは、TwitterにDMをしてください!(@shogo_python)
今回の記事が"いいね!"と思ってくれた方は、スキとフォローをよろしくおねがいします!
では、またの機会にお会いしましょう!
今回のおすすめ書籍
Python3 超入門講座 一覧はこちらから