Louis
Louis

Reputation: 321

Networkx remove_from_nodes <= 2 gives unexpected behavior: removing randomly?

I’m trying to graph a network based on some interactions. I want to remove nodes that have a degree smaller than or equal to 2. So here is my code.

G = nx.Graph()
G.add_nodes_from(['player1', 'player2', 'player3', 'player4', 'player5', 'player6', 'player7' ])
G.add_edges_from([('player1', 'player2'), ('player1', 'player3'), ('player1', 'player4'), ('player1', 'player6'), ('player3', 'player2'), ('player3', 'player7'), ('player3', 'player4')])
G.degree

I get that:

DegreeView({'player1': 4, 'player2': 2, 'player3': 4, 'player4': 2, 'player5': 0, 'player6': 1, 'player7': 1})

Expected. Then I perform the following:

nodes_to_remove = [node for node in G.nodes if G.degree(node) <= 2]
G.remove_nodes_from(nodes_to_remove)
G.degree

And it gives me that:

DegreeView({'player1': 1, 'player3': 1})

The output of nodes_to_remove is ['player2', 'player4', 'player5', 'player6', 'player7'] when it should actually be ['player1', 'player3'].

Anyone has an explanation?

I say "randomly" because when I switch around >= 2 or == 2 it never gives me the expected output… So I am quite confused.

Upvotes: 0

Views: 35

Answers (0)

Related Questions