我正在编写一个Python脚本,它读取一个CSV文件并创建一个deques列表。如果我在添加列表之前准确地打印出要添加到列表中的内容,它看起来就像我想要的那样,但是当我打印出列表本身时,我可以看到append正在用最新的元素覆盖列表中的所有元素。
# Window is a list containing many instances
def slideWindow(window, nextInstance, num_attributes):
attribute = nextInstance.pop(0)
window.popleft()
for i in range(num_attributes):
window.pop()
window.extendleft(reversed(nextInstance))
window.appendleft(attribute)
return window
def convertDataFormat(filename, window_size):
with open(filename, 'rU') as f:
reader = csv.reader(f)
window = deque()
alldata = deque()
i = 0
for row in reader:
if i < (window_size-1):
window.extendleft(reversed(row[1:]))
i+=1
else:
window.extendleft(reversed(row))
break
alldata.append(window)
for row in reader:
window = slideWindow(window, row, NUM_ATTRIBUTES)
alldata.append(window)
# print alldata
f.close()
return alldata
我不确定,但我怀疑它可能类似于这个问题http://forums.devshed.com/python-programming-11/appending-object-to-list-overwrites-previous-842713.html。
很难从这段代码中跟踪您真正想要的内容。我怀疑问题出在以下几个方面:
注意,在
slideWindow
函数中,修改输入deque(window
),然后返回修改后的deque
。所以,将deque
放入列表的第一个元素中,然后修改该对象(在slideWindow
中),并将另一个引用附加到列表中的同一个对象中。你打算这么做吗?
简单的解决方法是复制
slideWindow
中的window
输入并修改/返回副本。相关问题 更多 >
编程相关推荐