鱼C论坛

 找回密码
 立即注册
查看: 1624|回复: 6

[已解决]我发现了一个匪夷所思的问题,为啥加循环后结果不一样?

[复制链接]
发表于 2020-7-26 11:50:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求问为啥有如下差异,如何解决
运行第一个代码,能得到两张图,请关注第二张图,再运行第二个代码,会发现得到的图跟第一个代码的图不一样
import networkx as nx
import matplotlib.pyplot as plt
dictionary={ 3: [['O', 'H2'], ['H', 'OH']],36: [['H', 'O2'], ['HO2']], 38: [['H', 'O2'], ['O', 'OH']],  45: [['H', 'HO2'], ['O2', 'H2']]}

list=[[3,36,45],[3,45,38]]
for a in range(len(list)):
    edgelist=[]
    for b in list[a]:
        fanyingwu=dictionary[b][0]
        shengchengwu=dictionary[b][1]
        for c in fanyingwu:
            for d in shengchengwu:
                edgelist.append((c,d))
                
    G=nx.DiGraph()
    G.add_edges_from(edgelist)
    nx.draw_networkx(G, pos=None, arrows=True, with_labels=True)
    plt.savefig('D:\\%s.png'%a)

第二个代码,仅是把list中的第一项删去了
import networkx as nx
import matplotlib.pyplot as plt
dictionary={ 3: [['O', 'H2'], ['H', 'OH']],36: [['H', 'O2'], ['HO2']], 38: [['H', 'O2'], ['O', 'OH']],  45: [['H', 'HO2'], ['O2', 'H2']]}

list=[[3,45,38]]
for a in range(len(list)):
    edgelist=[]
    for b in list[a]:
        fanyingwu=dictionary[b][0]
        shengchengwu=dictionary[b][1]
        for c in fanyingwu:
            for d in shengchengwu:
                edgelist.append((c,d))
                
    G=nx.DiGraph()
    G.add_edges_from(edgelist)
    nx.draw_networkx(G, pos=None, arrows=True, with_labels=True)
    plt.savefig('D:\\%s.png'%a)
          
        
最佳答案
2020-7-26 13:07:12


第一个代码,最外层 for 循环需要循环  2 次

第二个代码,最外层 for 循环只需要循环 1 次

每次最外层 for 循环一次,最内层都要循环 3 次

导致你两个循环  edgelist.append((c,d)) 加入列表的数量不一致,所以产生的图片不同了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-26 12:34:51 | 显示全部楼层
有木有大神能指点一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-26 13:07:12 | 显示全部楼层    本楼为最佳答案   


第一个代码,最外层 for 循环需要循环  2 次

第二个代码,最外层 for 循环只需要循环 1 次

每次最外层 for 循环一次,最内层都要循环 3 次

导致你两个循环  edgelist.append((c,d)) 加入列表的数量不一致,所以产生的图片不同了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-26 15:36:37 | 显示全部楼层
第一个代码,最外层 for 循环需要循环  2 次
但每次循环, edgelist会被重置为空列表呀,加入到G的数据数量应该是一样多的呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-26 15:38:34 | 显示全部楼层
Twilight6 发表于 2020-7-26 13:07
第一个代码,最外层 for 循环需要循环  2 次

第二个代码,最外层 for 循环只需要循环 1 次

第一个代码,最外层 for 循环需要循环  2 次
但每次循环, edgelist会被重置为空列表呀,加入到G的数据数量应该是一样多的呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-27 09:39:36 | 显示全部楼层
你把plt.savefig这句话改成plt.show()
你可以看看自己生成的图,多执行几遍,你看看图片是不是一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-30 18:29:52 | 显示全部楼层
我发觉是好像是 循环nx.draw_networkx(G, pos=None, arrows=True, with_labels=True) 的问题,有木有大神指点下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 17:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表