【发布时间】:2022-01-16 09:30:17
【问题描述】:
我有创建邻接列表的函数:
adj_list = {}
list1 = []
def add_node(node):
if node not in list1:
list1.append(node)
else:
print(f'Node {node} already added')
def add_edge(node, target,weight):
temp= []
if node in list1 and target in list1:
temp.append(target,weight)
adj_list[node] = temp
elif node in adj_list:
temp.extend(adj_list[node])
temp.append(target,weight)
adj_list[node] = temp
else:
print('Node does not exit')
但我只能像这样手动添加节点和边:
add_node(0)
add_node(1)
add_edge(0,1,2)
add_edge(1,2,2)
但是我有一个比较大的图,不能全部手动添加,所以我把示例图数据放在一个数据框中:
| node | target | weight |
|---|---|---|
| 0 | 1 | 2 |
| 1 | 2 | 2 |
| 2 | 3 | 4 |
| 3 | 0 | 5 |
| 3 | 4 | 3 |
| 4 | 0 | 1 |
循环 df['node'] 有效:
for i in df['node']:
add_node(i)
但我找不到对 add_edges 执行相同操作的方法
所以我要构建的是一个函数,它接受一个数据框并返回一个图形,如下所示:
# graph
0 ---> [[1, 2]]
1 ---> [[2, 2]]
2 ---> [[3, 4]]
3 ---> [[0, 5], [4, 3]]
4 ---> [[0, 1]]
# adj_list
{0: [[1, 2]], 1: [[2, 2]], 2: [[3, 4]], 3: [[0, 5], [4, 3]], 4: [[0, 1]]}
另外,我知道 networkx 之类的库,但我需要从头开始实现它。
【问题讨论】:
标签: python pandas nodes graph-algorithm