Вы должны заметить, что соседей является итератором.Это означает, что после первой итерации у вас больше нет элементов для их итерации.При входе в строку for node1 in neighbors:
соседей пусто, и вы никогда не достигнете внутренней части цикла.Обратитесь к документации по функции здесь
Кроме того, обратите внимание, что n_links/+2
не меняет значение n_links.Это должно быть n_links/=2
.
nx.has_edge(node1,node2)
должно работать на графике.
Что касается логики - вы должны переместить линию, где вы делите на 2. Вы должны вычислить ее после того, как вы закончиливычисляя все связи между соседями, или просто добавляйте 0,5 каждый раз, когда вы найдете ребро.
После изменения этих вещей вы получите:
for node in network.nodes():
neighbours=[n for n in nx.neighbors(network,node)]
n_neighbors=len(neighbours)
n_links=0
if n_neighbors>1:
for node1 in neighbours:
for node2 in neighbours:
if network.has_edge(node1,node2):
n_links+=1
n_links/=2 #because n_links is calculated twice
clustering_coefficient=n_links/(0.5*n_neighbors*(n_neighbors-1))
print(clustering_coefficient)
else:
print(0)