需求
今天使用 python 编写一个数据处理的脚本时,结果怎么都不对。经过反复调试,问题出现在使用 append
给多维列表添加值的时候,我需要的是只在指定的列表里面添加,结果多维列表的内部多个列表同时被添加值了。
解决
原因
这个错误有点莫名其妙,一开始我以为是我写错了,导致类似于 numpy
里面那样,对多维数组操作时,对高维操作时,会有多个地方被修改。
但是在自己检查之后发现,并不是这种情况。后来经过反复的调试和搜索后,终于确定原因所在。
原因其实还是在新建多维列表的地方,如下是我开始时候的写法:
c1 = []
c2 = []
t = []
for i in range(0, 12):
l = [c1, c2, t]
out_data.append(l)
上面的写法看起来却是是新建了 12 * 3
的多维列表,但是隐藏的问题是,这样添加,其实添加的是 c1
, c2
, t
的引用,所以导致只要有一个变化了,其他的都会跟着变。
解决
只要修改创建多维列表的方法就可以了,比如这样:
out_data = [ [ [] for j in range(3) ] for i in range(channel_num) ]