需求

今天使用 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) ]

参考

Python 创建多维空列表

python初始化二维列表:{}.append({}) 与 {{}} * n

python 二维列表(数组)赋值问题

python二维列表List修改其中一个数值,所有项数值都改变的问题。