簡體   English   中英

用於循環遍歷嵌套列表

[英]For loop through a nested-list

我注意到一些非常奇怪的東西。 我試着看看它出錯的地方,並意識到由於某種原因, 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]時,您沒有創建新列表,只需指定一個指針即可。 你的指針指向包含['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使另外兩個保持不變。 你所做的就告訴別人重新看一下同一套牌,你打算換一張牌!

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

這只是用簡單的詞語澄清:

錯的

'list += part'

' for part in nest[1:]:
 list = nest[0]
 list += part
 print list'

變量列表將在每次迭代中更改其值。我的意思是變量列表將分配給以下值:

list = ['prefix']然后在第一次迭代后,它將被重新分配為:

list = ['prefix','line 1'] ##注意循環執行列表+ = part,如果繼續它將獲得[nest]的所有成員

所以解決方案的重點是在每次迭代中保持其值恆定的單獨變量

'list = [] + nest[0]'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM