我注意到一些非常奇怪的东西。我试着看看它出错的地方,并意识到由于某种原因,nest[0]
列表在循环的中途不断变化。
>>> nest = [['prefix'],['line 1'],['line 2']]
>>> for part in nest[1:]:
... list = nest[0]
... list += part
... print list
我得到的输出是:
['prefix', 'line 1']
['prefix', 'line 1', 'line 2']
然而,我需要的是:
['prefix', 'line 1']
['prefix', 'line 2']
有人可以解释为什么会这样吗?我可能会做一些非常愚蠢的事情。
答案 0 :(得分:2)
编辑:根据要求解释指针
您的问题是,当您将列表分配给嵌套[0]时,您不是在创建新列表,只需指定一个指针即可。您的指针指向包含['prefix']
的列表在第一次迭代中,您向此列表中添加了一些内容
在你的第二次迭代中,你没有制作一个新的清单,你只是重新指向旧的清单。
然后,当您再次追加时,您将附加到旧列表中!
你的意思是:
nest = [['prefix'],['line 1'],['line 2']]
for part in nest[1:]:
list = [] + nest[0]
list += part
print list
有几种方法可以考虑这一点。这是一个。假设你有一副纸牌对象:
myobj = Deck().
如果我说,
myobj2 = myobj,
我还没有创建一副新牌,就像其他人在看我已经拥有的牌组一样。我们需要能够做到这一点来做很多编程(这是面向对象设计的基础)!我需要说
myobj3 = Deck()
构建一个新的牌组对象。
考虑:
myobj.shuffle #we're shuffling one deck, that two people are looking at
myobj和myobj2都会改变。 调用myobj3.shuffle使另外两个保持不变。你所做的就告诉别人重新看一下同一套牌,你打算换一张新牌!
答案 1 :(得分:0)
list = nest[0]
表示您将指向nest [0]的指针分配给变量名list
如果您需要预期的输出,则需要创建一个新列表以确保它不会影响原始输出。
nest = [['prefix'],['line 1'],['line 2']]
for part in nest[1:]:
list = nest[0] + part
print list
nest[0] + part
将创建一个新值并分配给list
答案 2 :(得分:0)
这只是用简单的词语澄清:
错误的
'list += part'
in
' for part in nest[1:]:
list = nest[0]
list += part
print list'
变量列表将在每次迭代中更改其值。 我的意思是变量列表将分配给以下值:
list = ['prefix'] 然后在第一次迭代后,它将重新分配为:
list = ['prefix','line 1'] ##注意循环执行列表+ = part,如果你继续它会得到[nest]的所有成员
所以解决方案的重点是在每次迭代中保持其值恒定的单独变量
'list = [] + nest[0]'