expanded_nodes = [node for node in expanded_nodes if node.state != None]
我知道它是列表解析但是这个语句是如何工作的,我无法理解上述python语句中for循环的功能。请帮我解决。 在此先感谢!!
答案 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。