Перевірка наявності самопетель у графі
Як пояснював Ерік, NetworkX також допускає ребра, що починаються і закінчуються в одній і тій самій вершині; хоча для графа соціальної мережі це не дуже інтуїтивно, це корисно для моделювання даних на кшталт мереж поїздок, де люди починають у одній локації, а закінчують в іншій.
Перед подальшим аналізом корисно це перевірити, і NetworkX надає для цього метод: nx.number_of_selfloops(G).
У цій вправі та наступних вам стане в пригоді оператор assert. Вираз із assert перевіряє, чи твердження після нього оцінюється як True; інакше буде згенеровано AssertionError.
Спочатку викличте функцію nx.number_of_selfloops(), передавши T, у консолі IPython, щоб отримати кількість ребер, які починаються і закінчуються в одній вершині. Декілька самопетель було синтетично додано до графа. Ваше завдання у цій вправі — написати функцію, яка повертає ці ребра.
Ця вправа є частиною курсу
Вступ до аналізу мереж у Python
Інструкції до вправи
- Визначте функцію
find_selfloop_nodes(), яка приймає один аргумент:G.- За допомогою циклу
forпроітерайтеся всіма ребрами вG(без метаданих). - Якщо вершина
uдорівнює вершиніv:- Додайте
uдо спискуnodes_in_selfloops. - Поверніть список
nodes_in_selfloops.
- Додайте
- За допомогою циклу
- Перевірте, що кількість самопетель у графі дорівнює кількості вершин із самопетлями. Це вже зроблено для вас, тож натисніть "Submit Answer", щоб побачити результат!
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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))