2011-07-10 43 views
0

有沒有辦法在Python中整潔地創建大型(即可索引)的空列表?如何在python中創建可索引的空列表?

這就是我目前做:

firstgen=G.neighbors(node1) 
secgen=[] 
thirdgen=[[],[],[],[],[],[],[],[],[],[],[]] #11 brackets because len(secgen)=11 

for i in firstgen: 
    secgen.append(G.neighbors(i)) 

for i in range(len(secgen)): 
    for j in secgen[i]: 
     thirdgen[i].append(G.neighbors(j)) 

什麼我做的是找到一個原始節點的鄰居,鄰居的鄰居的網絡中和鄰居的,所以我的第三代名單應具有[...],[...],[...],[...],[...],[[...] ],[...],[]]]但我是python的新手,並且無法找到如何在沒有手動輸入thirdgen的情況下完成這項工作。

對不起,令人困惑的解釋。我這樣做是爲了找到網絡中的黑社會,即如果任何第三代節點與初始節點相同,那麼我發現了三合一。

謝謝!

編輯:我只是意識到,我可以簡單地把thirdgen.append([])在第一個循環。但仍然好奇其他方法。

+0

這看起來可能變得醜陋看看。除非你需要以我未知的原因這樣做,否則我會建議爲此創建自己的數據結構,其中一個具有處理特定需求的方法。 –

+0

「空」是什麼意思?索引到一個容器是你做檢索一個元素。 「空」的普通定義不允許實際存在要檢索的元素。它看起來像你想要一個空列表的嵌套列表;但是*你打算怎麼做*?請更詳細地解釋一下你正在談論的「網絡」和「黑社會」。 –

回答

2

也許:

thirdgen = [list() for x in range(len(secgen))] 
thirdgen = [list() for x in range(11)] 

或者,我可能會被誤解的實際問題。

+0

是的,就是這樣!謝謝 – iRoygbiv

+0

'list()'更習慣拼寫'[]'。 –

2

您可以使用列表生成器如下:[[] for x in range(11)]

+0

Ahh list generator。謝謝! – iRoygbiv

+3

這是一個列表理解。一個生成器將是'([] for x in xrange(11))'' –

3

您不需要創建空列表。您可以使用列表解析來建立你的嵌套列表:

firstgen = G.neighbors(node1) 
secndgen = [G.neighbors(node) for node in firstgen] 
thirdgen = [[G.neighbors(node) for node in group] for group in secndgen] 
  • firstgen: [node, ...]
  • secndgen: [[node, ...], ...]
  • thirdgen: [[[node, ...], ...], ...]