列表列表增加后的奇怪行为

时间:2019-11-27 12:51:55

标签: python

以下代码为我带来了令人惊讶的输出:

cols = [ int(x) for x in sys.argv[2:] ]

data = [[]] * len(cols)

with open( sys.argv[1] ) as f:
    for l in f:
        c = l.split()
        if len(c) <= cols[-1]: continue
        for i in range(0,len(cols)):
            print( i, cols[i], c[cols[i]] )
            data[i].append( float(c[cols[i]]) )
        print()

for i in range( 0, len(cols)):
    print( data[i] )

通过以下方式致电:

python3 script.py file.txt 2 3

其中“ file.txt”包含:

1       0       0       -21612.9       
2       0.0914607       0.0914607       -21611.6 
...       

第一个打印件的输出如预期的那样:

0 2 0
1 3 -21612.9

0 2 0.0914607
1 3 -21611.6

...

但是第二个循环返回了两个相同的列表,如下所示:

[0.0, -21612.9, 0.0914607, -21611.6, ...

我希望有两个列表:

[0.0, 0.0914607, ...
[-21612.9, -21611.6, ...

我知道可以使用例如defaultdict,但我想了解为什么该代码不起作用。我怀疑这是“数据”声明为空列表的固定大小列表吗?

1 个答案:

答案 0 :(得分:1)

data = [[]] * len(cols)更改为data = [[] for i in range(len(cols))] 并保持相同。