我编写了一个递归函数,它创建 nx3 数据的所有可能结果的组合,其中 n 是可变的数据点的结构[name_of_variable cluster_number uniqueness_condition]from collections import defaultdictx= [[1,1,'a'],[2,1,'b'],[3,1,'c'],[4,2,'c'],[5,2,'d'],[6,2,'a'],[7,3,'a'],[8,3,'d']]c=defaultdict(list)for i in x: c[i[1]]+=[i]w=list()def rec_cal(i,lis): if i in c.keys(): for j in c[i]: lis.append(j[0]) rec_cal(i+1,lis) lis.pop() else: global w w.append(lis)##print(lis)rec_cal(1,[])我试图将所有生成的 3 对存储在 w 中,但最后我得到一个空列表,我哪里出错了,任何帮助将不胜感激ps 如果写 print(lis) 而不是 w.append(lis) 打印所有正确的列表。
2 回答

温温酱
TA贡献1752条经验 获得超4个赞
当您打电话时,w.append(lis)
您将引用附加到列表lis
,而不是列表的副本。lis
当递归函数返回时,您附加的所有内容也会弹出,因此您将获得的所有内容w
将是对同一个空列表的大量引用。
另外,不要做i in c.keys()
,只要做i in c
,你就不会为 分配一个新值w
,所以没有必要使用global w
.

慕娘9325324
TA贡献1783条经验 获得超4个赞
跑步
w[0] is w[1]
可能会帮助您了解它失败的原因。您附加的所有引用都指向同一个对象。
更换
w.append(lis)
和
w.append(lis.copy())
是一个快速修复。但是一般来说,变异列表和引用列表要小心。
添加回答
举报
0/150
提交
取消