How to double all the values in a list

for-loop, list, python

Solution

Why doesn't this return `n = [6, 10, 14]`?

Because `n`, or `lst` as it is called inside `double`, is never modified. `x *= 2` is equivalent to `x = x * 2` for numbers `x`, and that only re-binds the name `x` without changing the object it references.

To see this, modify `double` as follows:

def double(lst):
    for i, x in enumerate(lst):
        x *= 2
        print("x = %s" % x)
        print("lst[%d] = %s" % (i, lst[i]))

To change a list of numbers in-place, you have to reassign its elements:

def double(lst):
    for i in xrange(len(lst)):
        lst[i] *= 2

If you don't want to modify it in-place, use a comprehension:

def double(lst):
    return [x * 2 for x in lst]

Problem

``` n = [3, 5, 7] def double(lst): for x in lst: x *= 2 print x return lst print double(n) ``` Why doesn't this return `n = [6, 10, 14]`? There should also be a better solution that looks something like `[x *=2 for x in lst]` but it doesn't work either. Any other tips about for-loops and lists would be much appreciated.

Original source