Python g、 networkx中的节点()无法与random.choice()一起使用

Python g、 networkx中的节点()无法与random.choice()一起使用,python,networkx,Python,Networkx,我试图在随机节点之间生成随机边,但代码行ab=choice(G.nodes())正在生成错误 import networkx as nx import matplotlib.pyplot as plt from random import choice G=nx.Graph() city_set=['a','b','c','d','e','f','g','h'] for each in city_set: G.add_node(each) ab=choice(G.nodes()) pri

我试图在随机节点之间生成随机边,但代码行
ab=choice(G.nodes())
正在生成错误

import networkx as nx
import matplotlib.pyplot as plt
from random import choice
G=nx.Graph()
city_set=['a','b','c','d','e','f','g','h']
for each in city_set:
    G.add_node(each)
ab=choice(G.nodes())
print(ab)
错误

C:\Users\DELL\Anaconda2\envs\untitled\python.exe C:/Users/DELL/Documents/PythonPrograms/beging/ntwxproject.py 回溯(最近一次呼叫最后一次): 文件“C:/Users/DELL/Documents/PythonPrograms/beging/ntwxproject.py”, 第10行,在 ab=选择(例如节点()) 文件“C:\Users\DELL\Anaconda2\envs\untitle\lib\random.py”,第259行,在选项中 返回seq[i]文件“C:\Users\DELL\Anaconda2\envs\untitled\lib\site packages\networkx\classes\reportview.py”, 第178行,在getitem 返回self.\u节点[n]键错误:1

进程已完成,退出代码为1


我是python新手,请帮助我。

由于您下一步想做什么还不是100%清楚,我尝试给出一些关于如何将
random.choice()
与您的城市列表结合使用的提示(请注意,它是一个“列表”,而不是一个“集合”-更好的识别者应该是城市列表)

编辑:我看到你添加了一些信息-所以我添加了一种构建边缘的方法

您的主要问题是,
G.nodes()
是一个
而不是一个简单的列表(即使它的字符串表示形式看起来像一个列表)

我希望这有点帮助…

您可以通过传递list(G.nodes())而不仅仅是G.nodes(),将G.nodes()转换为与random.choice()兼容的列表格式


networkx版本2.4中的G.nodes取代了G.node的使用

因此,如果您试图取消使用G.node作为密钥标识符的旧代码,则可能会遇到此错误

将所有G.node替换为G.nodes,反之亦然。根据您尝试工作的版本而定


我们需要更多的代码来帮助,特别是不清楚G.nodes()是什么()列出了图G中的所有节点,这里是代码
将networkx作为nx导入matplotlib.pyplot作为plt从随机导入选项G=nx.Graph()city_set=['a'、'b'、'c'、'd'、'e'、'f'、'G'、'h']中为每个城市_集合添加节点(每个)ab=choice(G.nodes())打印(ab)
以及什么是
choice()
random.choice()
?能否显示G.nodes()所在的代码块是否定义?问题应始终包含说明问题的最小示例-这意味着我们应该能够将其复制粘贴到开发环境中并重现问题。@OBu我已编辑了问题并添加了全部代码,抱歉第一次发布NP-我刚刚更新了我的答案并添加了创建边缘的示例。谢谢,它当然有帮助。如果它有帮助,请进行投票。如果它解决了您的问题,“接受”答案会很好。在stackoverflow上玩得开心!欢迎来到stackoverflow!请用一些代码和解释来支持您的答案。
import networkx as nx 
import matplotlib.pyplot as plt 
import random 

G=nx.Graph() 
city_list=['a','b','c','d','e','f','g','h']

# this is a bit easier then adding each node in a loop 
G.add_nodes_from(city_list)

# show type and content of G.nodes() 
print(G.nodes())
print(type(G.nodes()))

# based on your old code:    
for _ in city_list: 
    ab=random.choice(city_list) 
    print(ab)
print("list is now", city_list)

# generate n random edges
n=5
for _ in range(n):
    # random.sample(city_list, 2) gives a 2-tuple from city list
    # The '*'-operator unpacks the tuple to two input values for the .add_edge() method
    G.add_edge(*random.sample(city_list, 2))
print("Edges generated:", G.edges())
import networkx as nx
import matplotlib.pyplot as plt 
from random import choice      
G=nx.Graph()      
city_set=['a','b','c','d','e','f','g','h'] 
for each in city_set:     
    G.add_node(each)     
ab= choice(list(G.nodes())) 
print(ab)