2014-10-01 123 views
0

我有一个锥体之间的连接点的嵌套列表。制作圆锥体的邻居列表

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?

感谢

+0

“锥体之间的连接”到底是什么?它与整数列表有什么关系? “a”,“b”,“c”等列表中的值是什么意思? – Blckknght 2014-10-01 03:12:27

回答

0

如果我正确理解你的问题,你有一个图形边缘(圆锥交叉点)的列表,你想找到邻居每个图形顶点的名单(视锥细胞本身)。你遇到的问题是一些顶点没有边,所以它们不会出现在你的列表中。

解决此问题的最佳方法是将您的列表与您使用邻居列表创建的字典区别开来。您不需要将neighbor_list.values()转换为列表,而是需要通过您想要考虑的特定顶点键来遍历它。这样,对于任何没有任何边的值,您将得到一个默认值(并且您将按照定义明确的顺序获取它们,而不是任意的(尽管对于整数键趋向于顺序)会令您从dict数据结构得到

尝试使你的下一个到最后一行是:

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

根据需要调整覆盖你需要考虑顶点的range参数另外,考虑使用defaultdict从。 collections模块,它将自动为您建立列表,而不是与dict.setdefaultdict.get混淆。