我注意到一些很奇怪的东西。我试着看看哪里出错了,然后意识到由于某种原因,nest[0]
列表在循环的中途一直在变化。在
>>> nest = [['prefix'],['line 1'],['line 2']]
>>> for part in nest[1:]:
... list = nest[0]
... list += part
... print list
我得到的输出是:
^{pr2}$然而,我需要的是:
['prefix', 'line 1']
['prefix', 'line 2']
有人能解释一下为什么会这样吗?我可能在做一些非常愚蠢的事。在
编辑:根据要求解释指针
您的问题是,当您将list赋值给nest[0]时,您并不是在创建一个新列表,而是在指定一个指针。指针将指向包含['prefix']的列表
在您的第一次迭代中,您向这个列表中添加了一些内容
在您的第二次迭代中,您不需要创建一个新列表,您只需重新指向旧列表。在
然后当你再次追加时,你就是在旧列表上追加!在
你的意思是:
有几种方法可以考虑这个问题。这里有一个。假设你有一副牌对象:
^{pr2}$如果我说
我还没有创造一副新的牌,就像别人在看我已经有的牌。我们需要能够做很多编程(这是面向对象设计的基础)!我得说
构造一副新的卡片对象。在
考虑:
myobj和myobj2都将更改。 打电话给myobj3.shuffle让另外两个保持原样。你所做的告诉别人要重新审视同一副牌,你打算在那里做一个新的!在
这只是简单的澄清:
错的
在
^{pr2}$变量列表将在每次迭代中更改其值。。 我的意思是可变列表将分配给以下值:
列表=['prefix'] 在第一次迭代之后,它将被重新分配为:
list=['prefix','line 1']###注意循环excute list+=part,如果继续,它将获得[nest]的所有成员
因此,解决方案的重点是gitte分离变量,在每次迭代中保持其值不变
^{cd1>}是指将指针分配给嵌套[0]到变量名称^{cd2>}
如果您希望得到预期的输出,则需要创建一个新列表,以确保它不会影响原始列表。
^{cd3>}将创建一个新值并分配给^{{cd2>}
相关问题 更多 >
编程相关推荐