НачатьНачать бесплатно

Проверка наличия петель в графе

Как объяснил Эрик, NetworkX поддерживает рёбра, которые начинаются и заканчиваются в одном и том же узле. Для графа социальной сети это кажется нелогичным, однако такие петли удобны при моделировании, например, сетей маршрутов, где человек может начать и завершить путь в одной точке.

Перед дальнейшим анализом полезно проверить наличие подобных петель. Для этого в NetworkX есть специальный метод: nx.number_of_selfloops(G).

В этом и последующих упражнениях вам пригодится оператор assert. Он проверяет, является ли следующее за ним выражение истинным, и выбрасывает AssertionError, если это не так.

Для начала вызовите функцию nx.number_of_selfloops(), передав в неё T в IPython Shell, чтобы узнать количество рёбер, начинающихся и заканчивающихся в одном узле. В граф намеренно добавлено несколько петель. Ваша задача — написать функцию, которая возвращает эти рёбра.

Это упражнение является частью курса

Введение в анализ сетей на Python

Посмотреть курс

Инструкции к упражнению

  • Определите функцию find_selfloop_nodes(), принимающую один аргумент: G.
    • С помощью цикла for переберите все рёбра в G (без метаданных).
    • Если узел u равен узлу v:
      • Добавьте u в список nodes_in_selfloops.
      • Верните список nodes_in_selfloops.
  • Убедитесь, что количество петель в графе совпадает с количеством узлов в петлях. Эта проверка уже написана за вас — нажмите Отправить ответ, чтобы увидеть результат!

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

# 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))
Редактировать и запускать код