2017-02-13 100 views
0

我正在製作一個10乘10的網格0 s。我希望能夠通過if語句將(例如)前5行更改爲「ONE」。更改網格的多個部分的值(字符串列表?)

什麼是最好的方式去做沒有針對每個人0

我試過做類似grid[:5][:5]的目標多個0 s,但是這並沒有做任何事情。

grid = [[0 for x in range(10)] for y in range(10)] 

number = 1 

if number is 1: 
    grid[:5][:5] = "ONE" 

for row in grid: 
    print(" ".join(map(str, row))) 
+2

'numpy'允許這種索引: 'arr [:5,:5] = 1'與基本列表切片就像複製一個切片片段只是部分拷貝的一部分,而不是二維索引。 –

回答

1

您可以使用兩個嵌套循環for

for row in range(5): 
    for col in range(10): 
     grid[row][col] = 'ONE' 
0

由於電網[5] [5]返回一個新的列表,改變新的列表不會產生你想要的結果。

grid = [[0]*10 for x in range(10)] #pythonic way of making a list/list of list (grid) 

number = 1 
if number == 1: 
    for x in xrange(5): 
     for y in xrange(10): 
      grid[x][y] = "ONE" 

print(grid) 

輸出:

[['ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE'], 
['ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE'], 
['ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE'], 
['ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE'], 
['ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE', 'ONE'], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] 
0

你可以做到這一點,太,內list comprehension

grid = [[0 for x in range(10)] for y in range(10)] 

number = 1 
if number == 1: 
    grid = [["ONE" if y <5 else 0 for x in range(10)] for y in range(10)] 

for k in grid: 
    print(" ".join(map(str,k))) 

輸出:

ONE ONE ONE ONE ONE ONE ONE ONE ONE ONE 
ONE ONE ONE ONE ONE ONE ONE ONE ONE ONE 
ONE ONE ONE ONE ONE ONE ONE ONE ONE ONE 
ONE ONE ONE ONE ONE ONE ONE ONE ONE ONE 
ONE ONE ONE ONE ONE ONE ONE ONE ONE ONE 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0