BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #25801同步于 2021/10/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

【求助】递归函数+for循环嵌套使用保存结果为字典,但是始终指

fly2333
2021/10/13镜像同步13 回复
在有向无循环图中,递归函数+for循环嵌套使用(相当于深度搜索?),希望保存查找的每一条路径结果为字典,但是发现字典中结果始终指向同一内存位置[ema12][ema12],后面的数据会覆盖前面的结果,解决了很久也没有办法[ema1],代码小白[ema1]求助大神,有没有遇见过类似问题或者明白问题原理的可以帮帮忙~~ 如图,希望保存的Vertex.prev是不同的路径,但是始终保存的是最后查找的路径 更新了代码贴图~~第一次问这个相关的,不太懂[ema41],麻烦各位同学啦!
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
H1187498581机器人#1 · 2021/10/13
不会是局部变量吧 【 在 fly2333 (fly233) 的大作中提到: 】 : 在有向无循环图中,递归函数+for循环嵌套使用(相当于深度搜索?),希望保存查找的每一条路径结果为字典,但是发现字典中结果始终指向同一内存位置[ema12][e... : 如图,希望保存的Vertex.prev是不同的路径,但是始终保存的是最后查找的路径 : ...................
fly2333机器人#2 · 2021/10/13
刚刚检查过了应该不是这个问题还会有其他的原因嘛 【 在 H1187498581 的大作中提到: 】 : 不会是局部变量吧
zh19951213机器人#3 · 2021/10/13
代码贴一下呗,不然都不太理解在干嘛
AlHg机器人#4 · 2021/10/13
不给源码只给描述,是怕人剽窃、想要悬丝诊脉吗?楼主的代码要是没有那个保密价值,就不要藏着掖着了吧 哪怕写个同样问题的最小实现样本呢 P.S. 被字体治好了低血压
fly2333机器人#5 · 2021/10/13
【 在 zh19951213 的大作中提到: 】 : 代码贴一下呗,不然都不太理解在干嘛 已经贴上啦~~是一个函数[ema11]
fly2333机器人#6 · 2021/10/13
【 在 AlHg 的大作中提到: 】 : 不给源码只给描述,是怕人剽窃、想要悬丝诊脉吗?楼主的代码要是没有那个保密价值,就不要藏着掖着了吧 : 哪怕写个同样问题的最小实现样本呢 : P.S. 被字体治好了低血压 已经更新啦,同学可以看一下呢~~
zh19951213机器人#7 · 2021/10/14
是不是你字典定义在for循环里了,然后每次for循环字典就都重置了 【 在 fly2333 的大作中提到: 】 : 已经更新啦,同学可以看一下呢~~
AlHg机器人#8 · 2021/10/14
【 在 fly2333 的大作中提到: 】 : 已经更新啦,同学可以看一下呢~~ 虽然还不能算是最小可复现代码(起码要能运行叭),但是还是给出几点建议叭: else分支有些语句感觉是左手倒右手。比如你明显是用索引去获取节点的对象,然后紧接着就用对象的index值获取索引。如果不这么写的话,其实和if分支的好多逻辑是公用的(毕竟只干了创建一个新的路径节点这一件事),区别应该就只是应该继续递归还是把结果append到list里而已(就是说要对更新的路径做什么,是要继续生成路径还是保存路径),结果你在两个分支里各自实现了一遍,暂存的方法还不太一样,一个是普通的变量,另一个还得在字典里过一圈,中间在不同地点夹杂着print还不太好阅读 第二个比较迷惑的点是,为什么要在循环里创建一个只用一个字段的字典,这个字段还是整数类型,然后这个字典本身根本就没被用到 其他的细节也很迷惑,比如一个list的变量却起名叫target_dict,这不是害自己吗 总之就是不太能理解为什么要这么干吧 ---------------------------------- 或者不如说,如果楼主希望怎么写都不会出问题,就去用另一种语言吧。有完善的闭包(Python的闭包是漏的),不会有引用问题(鼓励甚至强制不可变),不会写出奇怪的重复逻辑(健全的模式匹配时刻提醒你写好代码),不会字典哈希满天飞(代数数据类型),不会有重定义问题(合理的作用域Shadow或者干脆不让你重定义),不会有递归性能问题(暴力递归自动优化成动态规划,用生成表达式实现自动函数缓存)。没错我说的就是高贵的Haskell(逃
fly2333机器人#9 · 2021/10/15
之前是定义在外面,但是结果也是这样,在网上查了以后改在里面的,结果还是不对 【 在 zh19951213 的大作中提到: 】 : 是不是你字典定义在for循环里了,然后每次for循环字典就都重置了