2015-12-08 60 views
0

附近元件I定義n x n陣列的bool的是這樣的:Python的切片分配改變列表

grid = [[False for x in range(n)] for x in range(n)] 

此功能設置該網格的矩形區域到狀態(真或假)

def set_region(grid, points, state): 
    x1, y1, x2, y2 = points 
    row = [state] * (x2 - x1 + 1) 
    for y in range (y1, y2 + 1): 
     grid[y][x1:x2] = row 

地區由2個角點定義(x1, y1)(x2, y2)
y對應於行,x是列

當我使用這個功能,整個區域設置爲True,它工作正常,但是當我試圖將其更改爲False,它的變化,但變化的元素之後行下一個元素成爲True

實施例:

n = 100; 
grid = [[False for x in range(n)] for x in range(n)] 
points = 57, 4, 58, 5 
set_region(grid, points, True) 
assert (grid[4][57] and grid[4][58] and grid[5][57] and grid[5][58]) == True 
assert (grid[4][59] or grid[5][59]) == False 
set_region(grid, points, False) 
assert (grid[4][57] and grid[4][58] and grid[5][57] and grid[5][58]) == False 
assert (grid[4][59] or grid[5][59]) == False 

最後斷言特此失敗。爲什麼?

回答

2

對我感到羞恥。 Python中slice的結束索引是獨佔的。這工作得很好

grid[y][x1:x2+1] = row 
1

的問題是你的+1 set_range,他們最終agregating更多的東西抓地力,刪除所有,除非這是慾望的行爲......

+0

我添加+1範圍()參數,因爲它是獨佔的,我需要包含值 –