Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs

Dashboard
Notifications
Mark all as read
Q&A

Why are list comprehensions written differently if you use `else`?

+11
−0

The following list comprehension worked when I tried it:

[num for num in hand if num != 11]

But this doesn't work:

[num for num in hand if num != 11 else 22]

which led me to believe that you can't use else in a list comprehension. However, it seems that you can, but it has to be written differently. This works:

[num if num != 11 else 22 for num in hand]

Why does the if need to be placed earlier in the comprehension if you use else with it?

Why does this post require moderator attention?
You might want to add some details to your flag.
Why should this post be closed?

0 comment threads

1 answer

+11
−0

It's not a matter of order; Python simply does not directly allow else clauses as part of list comprehensions (docs). When we use

[num if num != 11 else 22 for num in hand]

We are actually using Python's version of the ternary operator; the if and else are not part of the list comprehension itself but of the comprehension expression. That is, the above is actually

[(num if num != 11 else 22) for num in hand]
Why does this post require moderator attention?
You might want to add some details to your flag.

1 comment thread

To add, the if at the end of the list comprehension is a predicate (3 comments)

Sign up to answer this question »