python中for循环的含义是什么?

时间:2017-03-04 06:02:40

标签: python

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

我知道它是列表解析但是这个语句是如何工作的,我无法理解上述python语句中for循环的功能。请帮我解决。 在此先感谢!!

3 个答案:

答案 0 :(得分:0)

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

这里列表expanded_nodes的所有值都是逐个检查的,并且在检查了所有元素之后,只检查了那些值,其中" node.state!=无"将保留在列表中

答案 1 :(得分: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]

答案 2 :(得分:-2)

您看到的是列表显示,其中值被指定为理解。这被认为是好的,惯用的Python。

有关理解等方面的更多信息,请参阅the docs