LoginSignup
0
2

More than 3 years have passed since last update.

内包表記でのif...else

Posted at

リストの内包表記にif...else文がある場合、初心者はコードの読む順番に戸惑うことがあると思います。

>>> x = [8,1,7,2,6,3,5,4]

内包表記のif

>>> l1 = [i for i in x if i > 5]
>>> l1
[8, 7, 6]

ここでのif i > 5は内包表記の一部となります。
次のコードと等価です:

>>> l1 = []
>>> for i in x:
...     if i > 5:
...             l1.append(i)
...
>>> l1
[8, 7, 6]

内包表記でのif...else

>>> l2 = [i if i > 5 else 0 for i in x]
>>> l2
[8, 0, 7, 0, 6, 0, 0, 0]

ここでのi if i > 5 else 0は内包表記のシンタックスではありません。
次のコードと等価です:

>>> l2 = []
>>> for i in x:
...     l2.append(i if i > 5 else 0)
...
>>> l2
[8, 0, 7, 0, 6, 0, 0, 0]

条件式

上記のi if i > 5 else 0条件式という演算です。

>>> i = 6
>>> i if i > 5 else 0
6
>>> i = 4
>>> i if i > 5 else 0
0

ちなみに

条件式ではelseがないと怒られます。

>>> i = 6
>>> i if i > 5
  File "<stdin>", line 1
    i if i > 5
             ^
SyntaxError: invalid syntax

なので
下記のように書いても同じく怒られます。

>>> l3 = [i if i > 5 for i in x]
  File "<stdin>", line 1
    l3 = [i if i > 5 for i in x]
                       ^
SyntaxError: invalid syntax

参考

if/else in a list comprehension?

0
2
0

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
0
2