if else in a list comprehension [duplicate] if else in a list comprehension [duplicate] python python

if else in a list comprehension [duplicate]


>>> l = [22, 13, 45, 50, 98, 69, 43, 44, 1]>>> [x+1 if x >= 45 else x+5 for x in l][27, 18, 46, 51, 99, 70, 48, 49, 6]

Do-something if <condition>, else do-something else.


The reason you're getting this error has to do with how the list comprehension is performed.

Keep in mind the following:

[ expression for item in list if conditional ]

Is equivalent to:

for item in list:    if conditional:        expression

Where the expression is in a slightly different format (think switching the subject and verb order in a sentence).

Therefore, your code [x+1 for x in l if x >= 45] does this:

for x in l:    if x >= 45:        x+1

However, this code [x+1 if x >= 45 else x+5 for x in l] does this (after rearranging the expression):

for x in l:    if x>=45: x+1    else: x+5


[x+1 if x >= 45 else x+5 for x in l]

And for a reward, here is the comment, I wrote to remember this the first time I did this error:

Python's conditional expression is a if C else b and can't be used as:

[a for i in items if C else b]

The right form is:

[a if C else b for i in items]

Even though there is a valid form:

[a for i in items if C]

But that isn't the same as that is how you filter by C, but they can be combined:

[a if tC else b for i in items if fC]