LoginSignup
1
3

More than 3 years have passed since last update.

【Python中級者への道】リスト内包表記でif文を使う

Posted at

まとめへのリンク

はじめに

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$個入れた配列を返しています。

正直、上の例だと使いどころさんが ないです。

1
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3