Reputation: 321
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