制作一个邻居的锥体列表

时间:2014-10-01 03:01:58

标签: python

我有一个嵌套的锥体连接列表。

a = [0,1]
b = [2,4]
c = [2,0]
d = [4,3]
e = [6,3]

f=[a,b,c,d,e]

我想编写一个程序,列出锥0的每个邻居,锥1的每个邻居...即我想要输出

[[1,2],[0],[0,4],[4,6],[2,3],[],[3]]

注意圆锥5是空的,因为它没有邻居。

我的计划如下:

 neighbour_list = {}

 for x, y in e:
   neighbour_list.setdefault(x, [])
   neighbour_list[x].append(y)
   neighbour_list.setdefault(y, [])
   neighbour_list[y].append(x)
 neighbour_list = list(neighbour_list.values())
 print(neighbour_list)

然而输出不打印锥5的邻居它只是跳过它:

 [[1, 2], [0], [4, 0], [4, 6], [2, 3], [3]]

如何打印锥形5的空列表?

感谢

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,您会在图表中找到边缘列表(圆锥交点),并且您正在尝试查找每个图形顶点(锥体本身)的邻居列表。您遇到的问题是某些顶点没有边缘,因此它们不会出现在您的列表中。

解决此问题的最佳方法是以与使用邻居列表创建的字典不同的方式构建列表。您不需要将neighbor_list.values()转换为列表,而是需要通过您想要考虑的特定顶点键对其进行迭代。这样,您将获得任何没有任何边缘的值的默认值(并且您将以明确定义的顺序获取它们,而不是任意(尽管趋向于顺序,对于整数键)命令您从dict数据结构中获取。

尝试使你的下一行成为:

neighbor_list = [neighbor_list.get(x, []) for x in range(7)]

根据需要调整range参数以覆盖您需要考虑的顶点。另外,请考虑使用defaultdict模块中的collections,该模块会自动为您构建列表,而不是弄乱dict.setdefaultdict.get