リスト内包表記
タプルから要素を取り出してリストを作る
# タプルから要素を取り出してリストを作る
t = (1, 2, 3, 4, 5)
# forループを使う
r = []
for i in t:
r.append(i)
print(r) # [1, 2, 3, 4, 5]
# リスト内表記
r = [i for i in t]
print(r) # [1, 2, 3, 4, 5]
条件式を使って偶数のみを取り出す
# タプルから偶数のみを取り出してリストを作る
t = (1, 2, 3, 4, 5)
# forループを使う
r = []
for i in t:
if i % 2 == 0:
r.append(i)
print(r) # [2, 4]
# リスト内表記
r = [i for i in t if i % 2 == 0]
print(r) # [2, 4]
2つのforループ
t = (1, 2)
t2 = (5, 6, 7)
# forループ
r = []
for i in t:
for j in t2:
r.append(i * j)
print(r) # [5, 6, 7, 10, 12, 14]
# リスト内包表記
r = [i * j for i in t for j in t2]
print(r) # [5, 6, 7, 10, 12, 14]
条件式
# 2重forの条件式
t = (1, 2, 3, 4)
t2 = (5, 6, 7, 8)
r = [i * j for i in t for j in t2]
print(r) # [5, 6, 7, 8, 10, 12, 14, 16, 15, 18, 21, 24, 20, 24, 28, 32]
r = [i * j for i in t if i % 2 == 0 for j in t2]
print(r) # [10, 12, 14, 16, 20, 24, 28, 32]
r = [i * j for i in t if i % 2 == 0 for j in t2 if j % 2 == 0]
print(r) # [12, 16, 24, 32]
forは何重にもつなげることができるが、つなげすぎるとわかりにくくなってしまう。
辞書包括表記
2つのリストを対応させた辞書を作成
w = ['mon', 'tue', 'wed']
f = ['coffee', 'milk', 'water']
# for文
for x, y in zip(w, f):
d[x] = y
print(d) # {'mon': 'coffee', 'tue': 'milk', 'wed' : 'water'}
# 辞書包括表記
d = {x: y for x, y in zip(w, f)}
print(d) # {'mon': 'coffee', 'tue': 'milk', 'wed' : 'water'}
集合内包表記
集合内包表記はリスト内包表記とほぼいっしょ
s = set()
# for文で
for i in range(10):
s.add(i)
print(s) # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
# 集合内包表記で
s = {i for i in range(10)}
print(s) # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
ジェネレーター内包表記
# ジェネレータを生成
def g():
for i in range(10):
yield i
g = g()
print(next(g)) # 0
print(next(g)) # 1
print(next(g)) # 2
print(next(g)) # 3
# ジェネレーター内包表記
g = (i for in range(10))
print(next(g)) # 0
print(next(g)) # 1
print(next(g)) # 2
print(next(g)) # 3
print(type(g)) # <class 'genereator'>
()を使用しているのでタプルが生成されそうですが、typeを確認するとタプルではなくジェネレーターになっていることがわかります。
内包表記でタプルを生成するには、()の前にtupleと記述します。
g = tuple(i for in range(10))
print(g) # (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
print(type(g)) # <class 'tuple'>
まとめ
リスト内包表記 | r = [i for i in t] |
辞書内包表示 | d = {x: y for x, y in zip(x, y)} |
集合内包表記 | s = {i for i in range(10)} |
ジェネレーター内包表記 | g = (i for i in range(10)) |
タプル内包表記 | g = tuple(i for i in range(10)) |
コメント