通过嵌套列表的For循环

2024-04-23 08:51:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我注意到一些很奇怪的东西。我试着看看哪里出错了,然后意识到由于某种原因,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']

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


Tags: in列表forprefixlinelistprint意识
3条回答

编辑:根据要求解释指针

您的问题是,当您将list赋值给nest[0]时,您并不是在创建一个新列表,而是在指定一个指针。指针将指向包含['prefix']的列表

在您的第一次迭代中,您向这个列表中添加了一些内容

在您的第二次迭代中,您不需要创建一个新列表,您只需重新指向旧列表。在

然后当你再次追加时,你就是在旧列表上追加!在

你的意思是:

nest = [['prefix'],['line 1'],['line 2']]
for part in nest[1:]:
    list = [] + nest[0]
    list += part
    print list

有几种方法可以考虑这个问题。这里有一个。假设你有一副牌对象:

^{pr2}$

如果我说

myobj2 = myobj, 

我还没有创造一副新的牌,就像别人在看我已经有的牌。我们需要能够做很多编程(这是面向对象设计的基础)!我得说

myobj3 = Deck() 

构造一副新的卡片对象。在

考虑:

myobj.shuffle #we're shuffling one deck, that two people are looking at

myobj和myobj2都将更改。 打电话给myobj3.shuffle让另外两个保持原样。你所做的告诉别人要重新审视同一副牌,你打算在那里做一个新的!在

这只是简单的澄清:

错的

'list += part'

^{pr2}$

变量列表将在每次迭代中更改其值。。 我的意思是可变列表将分配给以下值:

列表=['prefix'] 在第一次迭代之后,它将被重新分配为:

list=['prefix','line 1']###注意循环excute list+=part,如果继续,它将获得[nest]的所有成员

因此,解决方案的重点是gitte分离变量,在每次迭代中保持其值不变

'list = [] + nest[0]'

^{cd1>}是指将指针分配给嵌套[0]到变量名称^{cd2>}

如果您希望得到预期的输出,则需要创建一个新列表,以确保它不会影响原始列表。

nest = [['prefix'],['line 1'],['line 2']]
for part in nest[1:]:
    list = nest[0] + part
    print list

^{cd3>}将创建一个新值并分配给^{{cd2>}

相关问题 更多 >