我想在python中实现图形的邻接列表表示(出于教育目的,我不是要重新发明轮子:-))
每个顶点指向一个边数组。我希望它们被初始化,以便我可以立即执行append
。
所以我写道:
self.vertices = [[]] * size
但这不起作用,因为我得到了相同的列表对象重复,所以当我写
self.vertices[v1].append(edge_index)
此数字附加到所有(或唯一)数组
如何以优雅的方式执行列表初始化?
答案 0 :(得分:3)
你可以这样做:
self.vertices = [[] for _ in range(size)]
size = 5
a = [[] for _ in range(size)]
a[2].append(5)
>>> print a
[[], [], [5], [], []]
答案 1 :(得分:2)
class adj_matrix:
def add_data(self):
self.size = 10
self.vertices = [[] for i in range(self.size)]
# append a single value
self.vertices[1].append(5)
# append a dict
self.vertices[2].append({'a':2})
# append a list
self.vertices[3].append([1,2,3])
self.vertices[4].append((1,2));
print self.vertices
mat = adj_matrix()
mat.add_data()
根据您的需要添加数据。
<强>输出强>:
[[], [5], [{'a': 2}], [[1, 2, 3]], [(1, 2)], [], [], [], [], []]