类型错误:不可损坏的类型:';列表';用python

类型错误:不可损坏的类型:';列表';用python,python,networkx,Python,Networkx,我是python新手,我正在尝试做以下工作: 从列表randomnodes中按顺序获取元素x,并将x的邻居追加到列表末尾 重复此操作,直到列表的大小为100 我写的代码如下: for x in randomnodes: if len(randomnodes)<=100: randomnodes.append(neighbors(x)) 随机节点中x的: 如果len(randomnodes)您遇到的问题是将邻居列表添加到randomnodes的末尾,而不是从列表中添

我是python新手,我正在尝试做以下工作:

  • 从列表
    randomnodes
    中按顺序获取元素
    x
    ,并将x的
    邻居追加到列表末尾
  • 重复此操作,直到列表的大小为100
  • 我写的代码如下:

    for x in randomnodes:
        if len(randomnodes)<=100:
            randomnodes.append(neighbors(x))
    
    随机节点中x的

    如果len(randomnodes)您遇到的问题是将邻居列表添加到
    randomnodes
    的末尾,而不是从列表中添加元素。这将导致后面的迭代尝试获取嵌套邻居列表的邻居,从而导致异常

    如果您不介意
    randomnodes
    列表有时会获得一些额外的元素,您可以在当前代码中用
    extend
    替换
    append

    否则,请尝试此使用
    列表的稍微复杂的代码。extend
    可将相邻列表中的适当数字元素添加到
    随机节点中,而不会使其长度超过100项:

    for x in randomnodes:
        neighbors_list = neighbors(x)
        if len(randomnodes) + len(neighbors_list) < 100:
            randomnodes.extend(neighbors_list)
        else:
            randomnodes.extend(neighbors_list[:100-len(randomnodes)]
            break
    

    请你完整地回溯一下好吗?这离回溯只有两行。什么是
    randomnodes
    ?你能打印邻居的类型(x)吗@Greg Hewgill:这是一个列表。@duck:Neights(x)只在图中生成节点x的邻居(比如2的邻居可以是3,4,5。因此,x的邻居返回一个列表[3,4,5])
    set
    是合适的。但据我所知,集合不能用循环更新,代码将抛出一个错误:
    RuntimeError:Set在迭代过程中更改了大小
    。你也能用
    set
    更新你的答案吗?没错,这并不像我想的那么简单。您需要维护一个单独的
    节点集
    ,该节点集是您在继续遍历扩展的列表时看到的。我已经用另一个版本的代码更新了我的答案,以避免重复节点。
    for x in randomnodes:
        neighbors_list = neighbors(x)
        if len(randomnodes) + len(neighbors_list) < 100:
            randomnodes.extend(neighbors_list)
        else:
            randomnodes.extend(neighbors_list[:100-len(randomnodes)]
            break
    
    seen = set(randomnodes)
    for x in randomnodes:
        neighbors_list = [n for n in neighbors(x) if n not in seen]
        if len(randomnodes) + len(neighbors_list) < 100:
            randomnodes.extend(neighbors_list)
            seen.update(neighbors_list)
        else:
            randomnodes.extend(neighbors_list[:100-len(randomnodes)]
            break