ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

为什么要追加使用新元素覆盖列表中的所有内容?

2019-11-01 02:08:57  阅读:198  来源: 互联网

标签:overwrite list append python


我正在编写一个Python脚本,该脚本读取CSV文件并创建双端队列.如果我精确地打印出添加到列表之前要追加到列表中的内容,则看起来像我想要的,但是当我打印出列表本身时,我可以看到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

解决方法:

很难从此代码中跟踪您到底想要什么.我怀疑问题出在以下方面:

alldata.append(window)

for row in reader:
    window = slideWindow(window, row, NUM_ATTRIBUTES)
    alldata.append(window)

请注意,在slideWindow函数中,您修改了输入双端队列(窗口),然后返回修改后的双端队列.因此,您将双端队列放入列表的第一个元素中,然后修改该对象(在slideWindow内部),然后将对同一对象的另一个引用附加到列表中.

那是你打算做的吗?

简单的解决方法是复制在slideWindow中输入的窗口并修改/返回副本.

标签:overwrite,list,append,python
来源: https://codeday.me/bug/20191101/1980190.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有