2017-03-04 49 views
-1
expanded_nodes = [node for node in expanded_nodes if node.state != None] 

我知道它是列表理解,但是這個語句是如何工作的,我無法理解上述python語句中for循環的功能。請幫我解答。 在此先感謝!for循環在python中的含義?

+0

如果expanded_nodes中的node.state不相等無無,那麼節點已添加到expanded_nodes。 您將擁有expanded_nodes整個狀態中的所有節點不爲null –

+0

嘗試學習官方文檔https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions –

回答

-2

您所看到的是列表顯示,其中值被指定爲的理解。這被認爲是很好的,慣用的Python。

更多的內涵見the docs

0
expanded_nodes = [node for node in expanded_nodes if node.state != None] 

這裏所有的列表expanded_nodes的價值是由一個一個檢查,並檢查所有的元素後,只有那些值,其中「node.state!=無」將保留在列表中

0

該表達式被稱爲列表理解。爲了理解爲什麼它很有用,讓我們看看沒有理解的代碼可能是什麼樣子。在功能上,這應該等同於上面的理解:

# For clarity, let's assign the output to a differently named variable. 
filtered_nodes = [] 
for node in expanded_nodes: 
    if node.state != None: 
     filtered_nodes.append(node) 

這種過濾操作很常見。它一直出現。事實上,這很常見,您可能已經看到了一些功能,其唯一目的是過濾或以其他方式將一個列表轉換爲另一個列表。讓我們來看看是什麼樣子:

def filter_nodes(nodes): 
    filtered_nodes = [] 
    for node in nodes: 
     if node.state != None: 
      filtered_nodes.append(node) 
    return filtered_nodes 

filtered_nodes = filtered_nodes(nodes) 

注意,我們有多少次引用的中間變量,filtered_nodes。如果我們可以讓這個功能少一點冗餘,這不是很好嗎?通過理解,你可以!

def filter_nodes(nodes): 
    return [node for node in nodes if node.state != None] 

filtered_nodes = filtered_nodes(nodes) 

當你習慣了這個簡潔的公式時,你會注意到函數包裝器可能不再有用。因此,讓我們失去它:

filtered_nodes = [node for node in nodes if node.state != None]