猿问

For通过嵌套列表循环

我注意到一些很奇怪的东西。我试图查看问题出在哪里,并意识到由于某种原因,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']

有人可以解释为什么会这样吗?我可能正在做一些非常愚蠢的事情。


杨魅力
浏览 203回答 3
3回答

红糖糍粑

根据要求对指针进行说明您的问题是,当您将列表分配给nest [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 atmyobj和myobj2都将更改。调用myobj3.shuffle会使其他两个保持不变。您所做的一切告诉某人重新查看同一副牌,这意味着您要制作一个新牌!

撒科打诨

这只是简单的说明:错的'list += part'在' for part in nest[1:]: list = nest[0] list += part print list'变量列表将在每次迭代中更改其值..我的意思是,变量列表将分配给以下值:list = ['prefix'],然后在第一次迭代后将其重新分配为:list = ['prefix','line 1'] ##注意循环执行列表+ = part,如果继续,它将获得[nest]的所有成员因此,解决方案着重于gitting独立变量,该变量在每次迭代中均保持不变'list = [] + nest[0]'
随时随地看视频慕课网APP

相关分类

Python
我要回答