如何在Python中创建可索引的空列表?

0 投票
3 回答
1068 浏览
提问于 2025-04-16 21:11

有没有简单的方法可以在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([])来实现。不过我还是对其他方法感兴趣。

3 个回答

2

也许是这样:

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

或者我可能误解了真正的问题。

2

你可以这样使用列表生成器:[[] for x in range(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, ...], ...], ...] // 这是第三层列表,里面有多个第二层列表

撰写回答