python 内包表記について
#python
リスト内包表記は以下のように書く
code:例
式 for 任意の変数名 in イテラブルオブジェクト
code:python
#通常
squares=list()
for i in range(5):
squares.append(i**2)
print(squares)
# 0, 1, 4, 9, 16
#内包表記
squares = i**2 for i in range(5)
print(squares)
# 0, 1, 4, 9, 16
ifで条件分岐することも可能。その場合は以下のように後置でifを記述する。
code:例
式 for 任意の変数名 in イテラブルオブジェクト if 条件式
code:python
#通常
odds = []
for i in range(10):
if i % 2 == 1:
odds.append(i)
print(odds)
# 1, 3, 5, 7, 9
#内包表記
odds = i for i in range(10) if i % 2 == 1
print(odds)
# 1, 3, 5, 7, 9
三項演算子との組み合わせ(if else的な処理)
三項演算子は真のときの値 if 条件式 else 偽のときの値になるので以下のように記述できる。
code:例
真のときの値 if 条件式 else 偽のときの値 for 任意の変数名 in イテラブルオブジェクト
code:python
#通常
odd_even = []
for i in range(10):
if i % 2 == 1:
odd_even.append('odd')
else:
odd_even.append('even')
print(odd_even)
# 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd'
#内包表記
odd_even = 'odd' if i % 2 == 1 else 'even' for i in range(10)
print(odd_even)
# 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd'
ネストしたリスト内包表記
forループをネストするように、リスト内包表記もネストすることができる
code:例
[式 for 変数名1 in イテラブルオブジェクト1
for 変数名2 in イテラブルオブジェクト2
for 変数名3 in イテラブルオブジェクト3 ... ]
code:python
matrix = 1, 2, 3], 4, 5, 6, [7, 8, 9
#通常
flat = []
for row in matrix:
for x in row:
flat.append(x)
print(flat)
# 1, 2, 3, 4, 5, 6, 7, 8, 9
#内包表記
flat = x for row in matrix for x in row
print(flat)
# 1, 2, 3, 4, 5, 6, 7, 8, 9
https://note.nkmk.me/python-list-comprehension/
より参照