networkx和列表的迭代 - 我无法理解的代码片段

时间:2016-01-21 08:34:38

标签: python list networkx

我是python语言的新手,并且一直使用networkx包。基本上我有一个客户和生产者列表,并希望有一个功能,可以根据这些类型检索当前列表的列表。

以下是检索客户的函数的相关代码:

def customers_iter(self, data=False):

    """ Return an iterator over all customers.

        If the network is changed during iteration, the iterator becomes
        invalid.

        Parameters
        -----------

        data -  if True, return a list of (name, attributes) pairs, such
                that attributes == net.node[name]. Otherwise,
                only a list of customer names is returned. Default is
                False.
    """

    if data:
        return (n for n in self.nodes_iter(data=True) 
                    if self.node[n[0]]["type"] == "customer")
    else:
        return (n for n in self.nodes_iter() 
                    if self.node[n]["type"] == "customer")

我的问题是关于if-和else语句。首先检查第一个节点n [0]有什么意义? else-section中的语句是否定义完全相同的东西?

此致 jazy

1 个答案:

答案 0 :(得分:0)

根据文件评论:

data -  if True, return a list of (name, attributes) pairs, such
        that attributes == net.node[name]. Otherwise,
        only a list of customer names is returned. Default is
        False.

假设data参数在self.node_iter函数中具有相同的含义,第一个分支(if)应该过滤(name, attributes)对,但第二个分支( else)应仅过滤name个。

同样假设self.node是一个类似字典的结构,用于保存关联对name - > node,很容易看出,在第一个分支中我们必须从nametuple)中检索n[0],而在第二个分支中我们可以使用n作为节点名称。