2017-10-16 137 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