Я пишу разные базовые c алгоритмы, чтобы попрактиковаться в написании кода в стиле pythoni c. Ниже приведена функция, которая производит базовый c рейтинг страницы на шаге k для данного графика G :
import networkx as nx
def basic_pagerank(G,k):
G_nodes = [node for node in G.nodes()]
lenG = len(G_nodes)
old_score = [1/lenG]*lenG
new_score = [0]*lenG
for i in range(0,k):
for node in G_nodes:
s_lst = [s for s in G.successors(node)]
len_s_lst = len(s_lst)
if len_s_lst != 0:
for s in s_lst:
s_i = G_nodes.index(s)
node_i = G_nodes.index(node)
new_score[s_i] = new_score[s_i] + old_score[node_i]/len_s_lst
old_score = new_score
new_score = [0]*lenG
return dict(zip(G_nodes, old_score))
Так, например, для следующего graph:
G = nx.DiGraph()
G.add_edges_from([('A','B'),('B','C'),('B','D'),('C','B'),('D','A'),('D','C'),('D','E'),('E','A')])
basic_pagerank(G, 2)
вывод {'A': 0.1, 'B': 0.43, 'C': 0.23, 'D': 0.2, 'E': 0.03}
.
У меня больше всего проблем с выражением самого внутреннего for-l oop способом pythoni c. Если я смогу это сделать, я думаю, что смогу написать остальное, используя понимание списка. Итак, по сути, мой вопрос: есть ли способ написать самый внутренний for-l oop способом pythoni c?