mapの代わりに使う
[ 式 for 変数名 in イテラブルオブジェクト]
>>> a=[1,2,3,4,5,6,7,8,9] >>> [i % 3 for i in a] [1, 2, 0, 1, 2, 0, 1, 2, 0] 条件式も使える >>> [i if i % 3 == 0 else -1 for i in range(10)] [0, -1, -1, 3, -1, -1, 6, -1, -1, 9]
末尾のifでフィルタができる
[ 式 for 変数名 in イテラブルオブジェクト if 条件式 ]
>>> [i for i in range(10) if i % 3 == 0] [0, 3, 6, 9] # 条件式と組み合わせる。3の倍数だけ取り出し、奇数は負数にする >>> [i if i % 2 == 0 else -i for i in range(10) if i % 3 == 0] [0, -3, 6, -9]
二次元リスト
>>> a=[1,2,3] >>> [i for i in a] [1, 2, 3] >>> [i for i in a for _ in range(2)] [1, 1, 2, 2, 3, 3] >>> [i for _ in range(2) for i in a] [1, 2, 3, 1, 2, 3]
左側のforが外側のループになる。イメージは
# [i for i in a for _ in range(2)] for i in a: for _ in range(2): i # [i for _ in range(2) for i in a] for _ in range(2): for i in a: i
flatten
>>> a=[[1,2,3], [7,8,9], [10,11,12]] >>> [i for sublist in a for i in sublist] [1, 2, 3, 7, 8, 9, 10, 11, 12] 以下のようには書けない >>> [i for i in sublist for sublist in a] NameError: name 'sublist' is not defined