Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

まとめへのリンク

https://qiita.com/ganariya/items/fb3f38c2f4a35d1ee2e8

はじめに

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

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

ganariya
最近はZennに出没しています
https://github.com/Ganariya/Ganariya
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away