2024-05-21 01:02:11 发布
网友
如果我有一个数字列表,并且我想用for循环递增它们,为什么这个不起作用:
>>> list=[1,2,3,4,5] >>> for num in list: ... num=num+1 ... >>> list [1, 2, 3, 4, 5]
我希望得到[2,3,4,5,6]。在
我知道我可以通过做
但必须有更简单的方法。在
这是因为您只获得对列表中变量的引用。当你在列表中改变的时候,你所指的只是你所指的东西。最好的解释是follow it visually-逐步检查在该链接上找到的执行可视化,它应该非常清楚。在
请注意,可变对象可以在适当的位置发生变化,这将影响列表(因为对象本身将发生更改,而不仅仅是您正在使用的名称所指向的名称)。有关比较,请参见the visualization here。在
这里最好的选择是list comprehension。在
new_list = [num + 1 for num in old_list]
可以通过索引数组来实现这一点。在
>>> list=[1,2,3,4,5] >>> for i in range(len(list)): ... list[i]=list[i]+1
这将避开Lattyware提到的引用问题。在
这是python中赋值如何工作的一个工件。当你做作业时:
name = something
获取对象something(它是计算右手边的结果)并将其绑定到本地命名空间中的名称name。执行for循环时,获取对循环中元素的引用,然后通过向旧对象添加1来构造新对象。{cd4>在当前名称空间中给你赋值。在
something
name
for
如果原始列表中的对象是可变的,则可以在for循环中对对象进行变异:
你会在原始列表通知中看到这些变化,但是我们没有在这里做任何作业。在
当然,正如lattyware建议的那样,您可以使用列表理解来构建新列表:
new_list = [x+1 for x in old_list]
你甚至可以让任务发生在适当的地方:
old_list[:] = [x+1 for x in old_list]
这是因为您只获得对列表中变量的引用。当你在列表中改变的时候,你所指的只是你所指的东西。最好的解释是follow it visually-逐步检查在该链接上找到的执行可视化,它应该非常清楚。在
请注意,可变对象可以在适当的位置发生变化,这将影响列表(因为对象本身将发生更改,而不仅仅是您正在使用的名称所指向的名称)。有关比较,请参见the visualization here。在
这里最好的选择是list comprehension。在
可以通过索引数组来实现这一点。在
这将避开Lattyware提到的引用问题。在
这是python中赋值如何工作的一个工件。当你做作业时:
获取对象
something
(它是计算右手边的结果)并将其绑定到本地命名空间中的名称name
。执行for
循环时,获取对循环中元素的引用,然后通过向旧对象添加1来构造新对象。{cd4>在当前名称空间中给你赋值。在如果原始列表中的对象是可变的,则可以在for循环中对对象进行变异:
^{pr2}$你会在原始列表通知中看到这些变化,但是我们没有在这里做任何作业。在
当然,正如lattyware建议的那样,您可以使用列表理解来构建新列表:
你甚至可以让任务发生在适当的地方:
相关问题 更多 >
编程相关推荐