1

I'm new to Python and I came across the following query. Can anyone explain why the following:

[ n**2 for n in range(1, 6)]

gives:

[1, 4, 9, 16, 25]
Eric
98.1k54 gold badges257 silver badges389 bronze badges
asked Jan 9, 2013 at 20:25
1

3 Answers 3

1

It is called a list comprehension. What is happening is similar to the following:

results = []
for n in range(1,6):
 results.append(n**2)

It therefore iterates through a list containing the values [0, 1, 2, 3, 4, 5] and squares each value. The result of the squaring is then added to the results list, and you get back the result you see (which is equivalent to 0**2, 1**2, 2**2, etc., where the **2 means 'raised to the second power').

This structure (populating a list with values based on some other criteria) is a common one in Python, so the list comprehension provides a shorthand syntax for allowing you to do so.

answered Jan 9, 2013 at 20:36
Sign up to request clarification or add additional context in comments.

Comments

1

Breaking it down into manageable chunks in the interpreter:

>>> range(1, 6)
[1, 2, 3, 4, 5]
>>> 2 ** 2 # `x ** 2` means `x * x`
4
>>> 3 ** 2
9
>>> for n in range(1, 6):
...  print n
1
2
3
4
5
>>> for n in range(1, 6):
... print n ** 2
1
4
9
16
25
>>> [n ** 2 for n in range(1, 6)]
[1, 4, 9, 16, 25]
answered Jan 9, 2013 at 20:40

Comments

0

So that's a list comprehension.

If you break it down into 3 parts; separated by the words: 'for' and 'in' ..

eg.

[ 1 for 2 in 3 ]

Probably reading it backwards is easiest:

  • 3 - This is the list of input into the whole operation
  • 2 - This is the single item from the big list
  • 1 - This is the operation to do on that item

part 1 and 2 are run multiple times, once for each item in the list that part 3 gives us. The output of part 1 being run over and over, is the output of the whole operation.


So in your example:

  • 3 - Generates a list: [1, 2, 3, 4, 5] -- Range runs from the first param to one before the second param
  • 2 - 'n' represents a single number in that list
  • 1 - Generates a new list of n**2 (n to the power of 2)

So an equivalent code would be:

result = []
for n in range(1, 6):
 result.append(n**2)

Finally breaking it all out:

input = [1, 2, 3, 4, 5]
output = []
v = input[0] # value is 1
o = v**2 # 1 to the power of two is 1
output.append(o)
v = input[1] # value is 2
o = v**2 # 2 to the power of two = (2*2) = 4
output.append(o)
v = input[2] # value is 3
o = v**2 # 3 to the power of two is = (3*3) = 9
output.append(o)
v = input[3] # value is 4
o = v**2 # 4 to the power of two is = (4*4) = 16
output.append(o)
v = input[4] # value is 5
o = v**2 # 5 to the power of two is = (5*5) = 25
output.append(o)

answered Jan 9, 2013 at 20:49

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.