为了账号安全,请及时绑定邮箱和手机立即绑定

For通过嵌套列表循环

For通过嵌套列表循环

杨魅力 2021-03-08 12:09:36
我注意到一些很奇怪的东西。我试图查看问题出在哪里,并意识到由于某种原因,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']有人可以解释为什么会这样吗?我可能正在做一些非常愚蠢的事情。
查看完整描述

3 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

根据要求对指针进行说明


您的问题是,当您将列表分配给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 at

myobj和myobj2都将更改。调用myobj3.shuffle会使其他两个保持不变。您所做的一切告诉某人重新查看同一副牌,这意味着您要制作一个新牌!


查看完整回答
反对 回复 2021-03-29
?
撒科打诨

TA贡献1934条经验 获得超2个赞

这只是简单的说明:


错的


'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]'


查看完整回答
反对 回复 2021-03-29
  • 3 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信