2017-10-16 140 views
0

我有一个输入矩阵看起来像这样蟒蛇组矩阵添加操作

grid = [[1,1,2],[1,2,3],[3,2,4]] 

我使用下面的代码来构建集的矩阵。

m,n = len(grid), len(grid[0]) 
valuesets = [[set()]*n for _ in range(m)] 

for j in range(n): 
    s = sum(grid[0][:j+1]) 
    valuesets[0][j].add(s) 
    print valuesets[0][0] 

输出给了我

set([1]) 
set([1, 2]) 
set([1, 2, 4]) 

我很奇怪,为什么valuesets [0] [0]正在更新每次在for循环而不是停留在相同的值设定([1])像我预料的那样?谢谢。

+0

默认参数值: https://docs.python.org/3/tutorial/controlflow.html#default-argument-values –

+1

不要这样做'[set()] * n'。改为使用'[set()for _ in range(n)]'。 –

回答

1

原因是[set()] * n通过复制相同的set()实例来创建列表。

如果要获取不同设置对象的列表,请使用[set() for _ in range(n)] instead