def generateNew(data):
for i in range(len(data)-1):
data[i].append(data[i+1][2])
data[-1].append(oP)
for i in range(len(data)-1):
data[i].append(data[i+1][0])
data[i].append(data[i+1][1])
data[-1].append(hlP[0])
data[-1].append(hlP[1])
for i in range(len(data)-1):
data[i].append(data[i+1][4])
data[-1].append(volume)
new = [hlP[0], hlP[1], oP, cP, volume]
print new
return new
dataSet = []
for i in f.readlines():
i = i.split(',')
x = [float(j) for j in i[1:-1]]
x.append(int(i[-1]))
dataSet.append(x)
dataSet.reverse()
mData = dataSet # for next loop, append new set
for i in range(10):
temp = predictNew(mData)
print dataSet
dataSet.append(temp)
mData = dataSet
这是我的代码。 dataSet
与[[1,2,3,4],[1,2,3,4]....]
类似,然后我将其分配给mData
并将其传递给函数generateNew
(我删除了一些不必要的细节),列表是现在像[[1,2,3,4,5,6],[1,2,3,4,5,6]....]
。但是,我认为不应该更改dataSet
和'mData',因为所有的更改都发生在函数内部,事实并非如此。任何人都可以告诉我为什么并改进吗?
提前谢谢。
答案 0 :(得分:0)
如果我理解正确,那么当您不希望更改时,您将获得更改数据集。如果这是问题,那么这一问题就出现在这一行:
mData = dataSet # for next loop, append new set
为了纠正这个问题,我会研究Python的复制和深度复制。当你复制'以这种方式列表,它实际上并没有制作另一个副本,而是引用原始副本。例如:
x = [1]
y = x
x.append(2)
x #expected output is [1, 2] because we added 2 to this.
>>>[1, 2]
y #y changes, even though it wasn't directly modified.
>>>[1, 2]
解决此问题的最简单方法是使用拼接复制: y = x [:] 但是,由于您在列表中有列表,因此无法解决您的问题。你需要(我认为)是来自copy module的深度复制。如果我帮忙,请告诉我!