如何将列表中的所有值加倍

新手上路,请多包涵
n = [3, 5, 7]

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

print double(n)

为什么不返回 n = [6, 10, 14]

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

关于 for 循环和列表的任何其他提示将不胜感激。

原文由 jane 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

为什么不返回 n = [6, 10, 14]

因为 nlst 因为它在内部被称为 double ,永远不会被修改。 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.

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

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

要就地更改数字列表,您必须重新分配其元素:

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

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

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

原文由 Fred Foo 发布,翻译遵循 CC BY-SA 3.0 许可协议

n = [3, 5, 7]

def double(lst):
    for x in lst:
        x *= 2
        print x # item value changed and printed
    return lst # original lst returned

print double(n)

您只修改了列表中的项目值并打印了它的编号,但返回了原始 lst 列表。 [x *=2 for x in lst] 语法错误,正确的写法是 [x*2 for x in lst] 。另一种方法是将 lambda 与地图一起使用:

 print(list(map(lambda x:x*2,[1,2,3])))

注意: print((lambda x:x*2)([1,2,3])) 会给出错误的答案,它输出为---与--- [1,2,3]*2 [1, 2, 3, 1, 2, 3] 相同

原文由 Ziyi Chen 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题