【发布时间】:2020-07-10 15:24:34
【问题描述】:
我想要的数据是列表n_ac、n_bc和n_cd中的值,我想每次都将这三个列表附加到其他三个名为copyn_ac、copyn_bc和copyn_cd的列表中我计算所需的数据。但是,我发现copyn_ac、copyn_bc 和copyn_cd 中的值成为最新附加列表中的值,因此copyn_ac、copyn_bc 和copyn_cd 中的所有值最终都变得相同。
这是我的代码的一部分(不相关的代码已被删除以缩短帖子):
def copy ():
print('Desired data:n_ac=',n_ac)
print('Desired data:n_bc=',n_bc)
print('Desired data:n_cd=',n_cd)
copyn_ac.append(n_ac)
copyn_bc.append(n_bc)
copyn_cd.append(n_cd)
def display_copyn ():
print('copyn_ac =', copyn_ac)
print('copyn_bc =', copyn_bc)
print('copyn_cd =', copyn_cd)
def start_1 (cell3):
for c in cell3:
c.save_n()
for c in cell3:
c.cal_init_val()
for c in cell3:
c.cal_alpha_S_R()
for c in cell3:
c.cal_y()
def start(cell3):
checking()
start_1(cell3)
copy()
def update (cell1,cell2,cell3):
checking() ### From Here ###
update_1(cell1)
update_2(cell2) ### Calculate the desired data ###
empty_list()
update_3(cell3) ### To Here ###
copy() ### copy desired data into other list
当我运行程序时:
start(cell3)
display_copyn()
update(cell1,cell2,cell3)
display_copyn()
update(cell1,cell2,cell3)
display_copyn()
输出:
Desired data:n_ac= [33.33333333333334, 33.33333333333334]
Desired data:n_bc= [36.66666666666666, 36.66666666666666]
Desired data:n_cd= [70, 70, 70, 70, 70]
copyn_ac = [[33.33333333333334, 33.33333333333334]]
copyn_bc = [[36.66666666666666, 36.66666666666666]]
copyn_cd = [[70, 70, 70, 70, 70]]
Desired data:n_ac= [33.33333333333334, 33.33333333333334]
Desired data:n_bc= [36.66666666666666, 36.66666666666666]
Desired data:n_cd= [110.0, 30.0, 70.0, 70.0, 70.0]
copyn_ac = [[33.33333333333334, 33.33333333333334], [33.33333333333334, 33.33333333333334]]
copyn_bc = [[36.66666666666666, 36.66666666666666], [36.66666666666666, 36.66666666666666]]
copyn_cd = [[110.0, 30.0, 70.0, 70.0, 70.0], [110.0, 30.0, 70.0, 70.0, 70.0]]
Desired data:n_ac= [33.33333333333334, 33.33333333333334]
Desired data:n_bc= [36.66666666666666, 36.66666666666666]
Desired data:n_cd= [150.0, 30.0, 30.0, 70.0, 70.0]
copyn_ac = [[33.33333333333334, 33.33333333333334], [33.33333333333334, 33.33333333333334], [33.33333333333334, 33.33333333333334]]
copyn_bc = [[36.66666666666666, 36.66666666666666], [36.66666666666666, 36.66666666666666], [36.66666666666666, 36.66666666666666]]
copyn_cd = [[150.0, 30.0, 30.0, 70.0, 70.0], [150.0, 30.0, 30.0, 70.0, 70.0], [150.0, 30.0, 30.0, 70.0, 70.0]]
一个启动函数和两个更新函数后的预期输出:
copyn_ac = [[33.33333333333334, 33.33333333333334], [33.33333333333334, 33.33333333333334], [33.33333333333334, 33.33333333333334]]
copyn_bc = [[36.66666666666666, 36.66666666666666], [36.66666666666666, 36.66666666666666], [36.66666666666666, 36.66666666666666]]
copyn_cd = [[70, 70, 70, 70, 70],[110.0, 30.0, 70.0, 70.0, 70.0],[150.0, 30.0, 30.0, 70.0, 70.0]]
我应该怎么做才能获得预期的输出?
更新: 我为我的程序做了一个最小的工作代码,同样的问题发生了:
import numpy as np
data01=[]
copy_data=[]
class cell ():
def __init__ (self,number, parameter,index, data=0):
self.number = number
self.parameter = parameter
self.index = index
self.data = data
def cal_data(self):
self.data = np.minimum(self.number,self.parameter)
data01.append(self.data)
def change_val(self):
self.number = data01[self.index]*1.1*self.number
self.parameter = data01[self.index]*1.2*self.parameter
def save_data ():
copy_data.append(data01)
def empty_list():
del data01 [::]
c1 = cell(2,5,0)
c2 = cell(3,1,1)
cell_1 =[c1,c2]
def start01 (cell_1):
for c in cell_1:
c.cal_data()
def start (cell_1):
start01(cell_1)
save_data()
print(copy_data)
def update01(cell_1):
for c in cell_1:
c.change_val()
def update02(cell_1):
for c in cell_1:
c.cal_data()
def update(cell_1):
update01(cell_1)
empty_list()
update02(cell_1)
save_data()
print(copy_data)
运行程序:
start(cell_1)
update(cell_1)
update(cell_1)
输出:
[[2, 1]]
[[4.4, 1.2], [4.4, 1.2]]
[[21.296000000000006, 1.728], [21.296000000000006, 1.728], [21.296000000000006, 1.728]]
【问题讨论】:
-
感谢您的回复,但在更改为
copyn_cd.append(n_cd)后,输出变为copyn_cd = [70, 70, 70, 70, 70, 110.0, 30.0, 70.0, 70.0, 70.0, 150.0, 30.0, 30.0, 70.0, 70.0]其中len(copyn_cd) =15与预期输出的len(copyn_cd) = 3 相比略有不同。 -
对不起..你能发布一个最小的工作代码吗?
-
我已经在帖子中上传了一个最小的工作代码,看看它是否有帮助
-
你怎么打电话给
start(cell_1) ...?最小的例子是缺少对 start() 的调用... -
我在函数
start01(cell_1)的代码下面有函数start(cell_1),start01(cell_1)将在调用start(cell_1)后运行