如何加倍列表中的所有值

jan*_*ane 4 python for-loop list

n = [3, 5, 7]

def double(lst):
    for x in lst:
        x *= 2
        print x
    return lst

print double(n)
Run Code Online (Sandbox Code Playgroud)

为什么不回归n = [6, 10, 14]呢?

还应该有一个更好的解决方案看起来像,[x *=2 for x in lst]但它也不起作用.

关于for循环和列表的任何其他提示将非常感激.

Fre*_*Foo 9

为什么不回归n = [6, 10, 14]呢?

因为n,或者lst在内部调用double,永远不会被修改.x *= 2等价x = x * 2于数字x,只重新绑定名称 x而不更改它引用的对象.

要查看此内容,请修改double如下:

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

要在适当位置更改数字列表,您必须重新分配其元素:

def double(lst):
    for i in xrange(len(lst)):
        lst[i] *= 2
Run Code Online (Sandbox Code Playgroud)

如果您不想就地修改它,请使用理解:

def double(lst):
    return [x * 2 for x in lst]
Run Code Online (Sandbox Code Playgroud)