Проверка наличия петель в графе
Как объяснил Эрик, 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))