Zacznij terazZacznij za darmo

Sprawdzanie, czy graf zawiera pętle własne

Jak omówił Eric, NetworkX umożliwia tworzenie krawędzi, które zaczynają się i kończą w tym samym węźle. W kontekście sieci społecznościowej brzmi to mało intuicyjnie, ale jest przydatne do modelowania takich danych jak sieci podróży – gdzie dana osoba wyrusza z jednego miejsca i kończy trasę w innym.

Warto sprawdzić obecność takich krawędzi przed przystąpieniem do dalszych analiz. NetworkX udostępnia do tego celu metodę: nx.number_of_selfloops(G).

W tym ćwiczeniu – podobnie jak w kolejnych – przyda ci się instrukcja assert. Sprawdza ona, czy wyrażenie umieszczone po niej zwraca wartość True; w przeciwnym razie zgłaszany jest błąd AssertionError.

Na początek wywołaj funkcję nx.number_of_selfloops(), przekazując jako argument T w powłoce IPython, aby sprawdzić liczbę krawędzi zaczynających się i kończących w tym samym węźle. Do grafu dodano syntetycznie pewną liczbę pętli własnych. Twoim zadaniem jest napisanie funkcji, która zwróci te krawędzie.

To ćwiczenie jest częścią kursu

Wprowadzenie do analizy sieci w Pythonie

Zobacz kurs

Instrukcje do ćwiczenia

  • Zdefiniuj funkcję o nazwie find_selfloop_nodes(), przyjmującą jeden argument: G.
    • Używając pętli for, iteruj po wszystkich krawędziach w G (bez metadanych).
    • Jeśli węzeł u jest równy węzłowi v:
      • Dodaj u do listy nodes_in_selfloops.
      • Zwróć listę nodes_in_selfloops.
  • Sprawdź, czy liczba pętli własnych w grafie jest równa liczbie węzłów w pętlach własnych. Ten krok jest już gotowy – kliknij Prześlij odpowiedź, aby zobaczyć wynik!

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# 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))
Edytuj i uruchom kod