まとめへのリンク
はじめに
Pythonの勉強をするために、acopyという群知能ライブラリを写経していました。
acopyでは、多くのPythonの面白い文法・イディオムが使われており、その中でも便利だなぁというのをまとめています。
今回は、Pythonのリスト内包表記のif文を学びます。
書き方
リスト内包表記でif文を使うことで、リストに使用する値の選別ができます。
例えば、$[0, N)$に含まれる偶数を洗い出すリストを書くと
N = int(input())
odds = [x for x in range(N) if x % 2]
print(odds)
上記のように書くことができます。
これは、if x % 2
の条件を満たすときのみxを判定します。
つまり
N = int(input())
arr = []
for x in range(N):
if x % 2 == 0:
arr.append(x)
上記のようなのが等価的なコードになります。
三項演算子と組み合わせる
三項演算子と組み合わせることができます。
リスト内包表記で右側につける条件は、値を判定するか?しないか?の選別です。
一方、三項演算子は、選別された値から条件を判定して、Trueの場合とFalseの場合の返す値を変えます。
先程のように偶数を返しますが、1の位が0のときは$0$が$x$個入ったリストを返すようにしましょう。
N = int(input())
'''
[[], 2, 4, 6, 8, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 12, 14, 16, 18, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 22, 24, 26, 28, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
'''
evens = [x if x % 10 else [0] * x for x in range(N) if x % 2 == 0]
print(evens)
for以降の後ろ側のifは、偶数かどうかの判定をし、選別を行います。
選別をくぐり抜けた後は三項演算子を利用して、1の位が0でないなら、そのまま、そうでないなら$0$を$x$個入れた配列を返しています。
正直、上の例だと使いどころさんが ないです。