【问题标题】:How do you create an indexable empty list in python?如何在 python 中创建可索引的空列表?
【发布时间】:2011-07-10 00:11:13
【问题描述】:

有没有办法在 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([]) 放在第一个循环中。不过仍然对其他方法感到好奇。

【问题讨论】:

  • 这看起来会变得很难看。除非您出于我不知道的原因需要这样做,否则我建议您为此创建自己的数据结构,其中包含处理您特定需求的方法。
  • “空”是什么意思?索引到容器是您检索元素的操作。 “空”的正常定义不允许实际存在要检索的元素。看起来您想要一个空列表的嵌套列表;但是你打算用它做什么?请更仔细地解释您所说的“网络”和“三合会”。

标签: python arrays list


【解决方案1】:

您不需要创建空列表。您可以使用列表推导来构建嵌套列表:

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, ...], ...], ...]

【讨论】:

    【解决方案2】:

    也许:

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

    或者我可能误解了实际问题。

    【讨论】:

    • list() 的拼写更惯用 []
    【解决方案3】:

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

    【讨论】:

    • 这是一个列表理解。生成器将是 ([] for x in xrange(11))
    【解决方案4】:

    看看numpy

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-10
      • 2019-07-27
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      相关资源
      最近更新 更多