IniziaInizia gratis

Verificare la presenza di autoanelli nel grafo

Come ha spiegato Eric, NetworkX consente anche archi che iniziano e terminano sullo stesso nodo; sebbene ciò sia poco intuitivo per un grafo di un social network, è utile per modellare dati come le reti di spostamenti, in cui le persone partono da una località e arrivano in un’altra.

È utile verificarlo prima di procedere con ulteriori analisi, e NetworkX fornisce un metodo a questo scopo: nx.number_of_selfloops(G).

In questo esercizio, così come nei successivi, ti sarà utile l’istruzione assert. Un’asserzione (assert) controlla se l’espressione che la segue è True; in caso contrario, genera un AssertionError.

Per iniziare, richiama la funzione nx.number_of_selfloops() passando T nell’IPython Shell per ottenere il numero di archi che iniziano e finiscono sullo stesso nodo. Un certo numero di autoanelli è stato aggiunto sinteticamente al grafo. Il tuo compito in questo esercizio è scrivere una funzione che restituisca questi archi.

Questo esercizio fa parte del corso

Introduzione all'analisi delle reti in Python

Visualizza il corso

Istruzioni dell'esercizio

  • Definisci una funzione chiamata find_selfloop_nodes() che accetta un argomento: G.
    • Usando un ciclo for, itera su tutti gli archi in G (escludendo i metadati).
    • Se il nodo u è uguale al nodo v:
      • Aggiungi u alla lista nodes_in_selfloops con append().
      • Restituisci la lista nodes_in_selfloops.
  • Verifica che il numero di autoanelli nel grafo sia uguale al numero di nodi che hanno autoanelli. Questo è già stato fatto per te, quindi fai clic su "Invia risposta" per vedere il risultato!

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

# Define find_selfloop_nodes()
def ____:
    """
    Finds all nodes that have self-loops in the graph G.
    """
    nodes_in_selfloops = []

    # Iterate over all the edges of G
    for u, v in ____:

    # Check if node u and node v are the same
        if ____:

            # Append node u to nodes_in_selfloops
            ____

    return nodes_in_selfloops

# Check whether number of self loops equals the number of nodes in self loops
assert nx.number_of_selfloops(T) == len(find_selfloop_nodes(T))
Modifica ed esegui il codice