python - 返回的列表与函数内部的不同
问题描述
这是我的代码:
def solve(lists,sums,num_list_,num,a):
if len(num_list_)==num:
if add(lists,num_list_)==sums:
print(num_list_)
return a+[num_list_]
return a
num_list=copy.deepcopy(num_list_)
for x in range(10):
num_list[num]=x
a=solve(lists,sums,num_list,num+1,a)
return a
def add(lists,unkown_num_list):
answer=0
for x in lists:
st=''
for y in x:
if isinstance(y,int):
y=str(unkown_num_list[y])
st+=y
st=int(st)
answer+=st
return answer
unkown_num_list=[]
difference=[]
a=solve([[0], [1, 0], [2, 1, 0], [3, 2, 1, 0]],2000,[0, 0, 0, 0],0,[])
它打印:
[0, 0, 0, 2]
[0, 0, 5, 1]
[5, 6, 4, 1]
[5, 6, 9, 0]
但是对于 variable a
,它是这样的:
[[0, 0, 0, 9], [0, 0, 5, 9], [5, 6, 4, 9], [5, 6, 9, 9]]
为什么这两个不同?
是因为我使用了递归吗?但其他时候,他们没有这种错误。
我正在使用 python3.6.1 和 macOS High Sierra。
我是Python初学者,如有错误请指出。
解决方案
尽管您的solve
函数中有一个 deepcopy,但在循环中,您在将相同的列表添加到结果后for
仍然会对其进行变异。所以在循环有不止一次迭代的情况下,你会得到意想不到的结果。 num_list
for
一种解决方案是在循环内移动 deepcopy :for
def solve(lists,sums,num_list_,num,a):
if len(num_list_)==num:
if add(lists,num_list_)==sums:
print(num_list_)
return a+[num_list_]
return a
for x in range(10):
num_list=copy.deepcopy(num_list_) # <----------
num_list[num]=x
a=solve(lists,sums,num_list,num+1,a)
return a
推荐阅读
- c# - 了解实体框架事务及其行为
- go - Int 串入 go?
- c# - XamDataGrid 标头布局
- python - 在机器学习中,改组如何与 ImageDataGenerator 一起工作?
- php - 内爆并用键显示 - php
- google-chrome-extension - 在 Chrome 扩展程序更新(使用内容脚本)后更新打开的标签的最佳做法是什么?
- python - 如何比较列上的两个数据框并替换为其他列值
- geopandas - 在 Altair 图表中绘制 GeoPandas 数据是否有更简单的方法?
- python - 从熊猫数据框中的字符串中删除数字
- string - 为什么我不能用 VBA 编写公式?