Warning

This documents an unmaintained version of NetworkX. Please upgrade to a maintained version and see the current NetworkX documentation.

Source code for networkx.algorithms.isolate

# -*- encoding: utf-8 -*-
#    Copyright 2015 NetworkX developers.
#    Copyright (C) 2004-2019 by
#    Aric Hagberg <hagberg@lanl.gov>
#    Dan Schult <dschult@colgate.edu>
#    Pieter Swart <swart@lanl.gov>
#    All rights reserved.
#    BSD license.
"""
Functions for identifying isolate (degree zero) nodes.
"""
import networkx as nx

__author__ = """\n""".join(['Drew Conway <drew.conway@nyu.edu>',
                            'Aric Hagberg <hagberg@lanl.gov>'])

__all__ = ['is_isolate', 'isolates', 'number_of_isolates']


[docs]def is_isolate(G, n): """Determines whether a node is an isolate. An *isolate* is a node with no neighbors (that is, with degree zero). For directed graphs, this means no in-neighbors and no out-neighbors. Parameters ---------- G : NetworkX graph n : node A node in `G`. Returns ------- is_isolate : bool True if and only if `n` has no neighbors. Examples -------- >>> G=nx.Graph() >>> G.add_edge(1,2) >>> G.add_node(3) >>> nx.is_isolate(G,2) False >>> nx.is_isolate(G,3) True """ return G.degree(n) == 0
[docs]def isolates(G): """Iterator over isolates in the graph. An *isolate* is a node with no neighbors (that is, with degree zero). For directed graphs, this means no in-neighbors and no out-neighbors. Parameters ---------- G : NetworkX graph Returns ------- iterator An iterator over the isolates of `G`. Examples -------- To get a list of all isolates of a graph, use the :class:`list` constructor:: >>> G = nx.Graph() >>> G.add_edge(1, 2) >>> G.add_node(3) >>> list(nx.isolates(G)) [3] To remove all isolates in the graph, first create a list of the isolates, then use :meth:`Graph.remove_nodes_from`:: >>> G.remove_nodes_from(list(nx.isolates(G))) >>> list(G) [1, 2] For digraphs, isolates have zero in-degree and zero out_degre:: >>> G = nx.DiGraph([(0, 1), (1, 2)]) >>> G.add_node(3) >>> list(nx.isolates(G)) [3] """ return (n for n, d in G.degree() if d == 0)
[docs]def number_of_isolates(G): """Returns the number of isolates in the graph. An *isolate* is a node with no neighbors (that is, with degree zero). For directed graphs, this means no in-neighbors and no out-neighbors. Parameters ---------- G : NetworkX graph Returns ------- int The number of degree zero nodes in the graph `G`. """ # TODO This can be parallelized. return sum(1 for v in isolates(G))