2017-03-04 48 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]