我有一棵樹,我想通過函式將其子節點作為串列回傳。在這個函式中,我需要遍歷一個字串串列。起初我是通過使用行內for 回圈來做到的
def get_children(root):
Data = [ ]
Data.append( root.data )
for child in root.children:
Data.append( elem for elem in get_children(child) )
return Data
但是,我得到了以下奇怪的結果:
['Electronics', <generator object get_children.<locals>.<genexpr> at 0x7fb3a081a3c0>, <generator object get_children.<locals>.<genexpr> at 0x7fb3a081a7b0>, <generator object get_children.<locals>.<genexpr> at 0x7fb3a081a9e0>]
然后,我將行內for回圈更改為典型的回圈,問題就解決了,即
for elem in get_children(child):
Data.append( elem )
我想知道您是否可以幫助我理解為什么會發生這種情況。我讀過一篇關于list comprehension的類似文章,但是,我仍然對試圖理解這里的區別感到困惑。
uj5u.com熱心網友回復:
因為你沒有用 [] 包裝你的串列理解,所以它的回傳值是一個生成器運算式(它生成你創建的串列)。您可以通過簡單地用 [] 包裝運算式來解決此問題
uj5u.com熱心網友回復:
你使用了生成器運算式而不是串列推導生成器運算式有點類似于串列推導,但前者不構造串列物件。生成器不是創建一個串列并將整個序列保存在記憶體中,而是根據需要生成下一個元素。
uj5u.com熱心網友回復:
問題出在這里Data.append( elem for elem in get_children(child)),您還沒有包裝串列理解。所以解決方案是在串列理解的開頭和結尾Data.append([elem for elem in get_children(child)])添加。[]
我認為您正在嘗試獲取根的所有子項,這是獲取 Tkinter 視窗的每個子小部件的解決方案
root.winfo_children()
您可以使用它代替for-loop,因為這將為您提供根視窗的每個子項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/436055.html
