Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Variation on python if statement syntax

Tags:

python

I ran across some python code syntax that I have never seen before. Here is an example:

i = 0
for spam in range(10):
    i += [1, 3][i > 5]
    print(i)

The result is the sequence of 1,2,3,4,5,6,9,12,15,18. So, it increments by 1 until i > 5, then increments by 3 thereafter.

Previously, I would have written the line as:

if i > 5:
    i += 3
else:
    i += 1

So what is the line: i += [1, 3][i > 5]?

  • What do you call that syntax structure?
  • Is it some form of list comprehension or something else entirely?

The syntax is interesting and I wanted to read more about it, but don't know where to look.

Edit: Thank you Darkstarone. I had never thought of using an expression to return a list index. That is very cool. This means you could also do things like: spam = ["Even", "Odd"][eggs % 2] to return an even or odd string or foo = ["A", "B", "C"][zot % 3] to cycle through three choices when looping through values of zot.

Probably won't make a habit of using this construct since other expressions are easier to understand. But, I'll take this into the bag o' tricks for that perfect situation.

like image 737
ShakiestNerd Avatar asked Oct 17 '22 12:10

ShakiestNerd


1 Answers

So what I believe is happening here is the list ([1,3]) can either be:

[1,3][0] # 1

Or

[1,3][1] # 3

It's taking advantage of the fact that 0 == False and 1 == True. It's rather neat, although a little opaque. I probably would have written it like so:

i = 0
for _ in range(10):
    i += 3 if i > 5 else 1
    print(i)
like image 140
Darkstarone Avatar answered Oct 20 '22 11:10

Darkstarone