类型错误:不可损坏的类型:';列表';用python
我是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的末尾,而不是从列表中添
randomnodes
中按顺序获取元素x
,并将x的邻居追加到列表末尾
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