2017-02-07 72 views
2

因此,我試圖在下面的網格中爲'x'換出'0',但是當我嘗試刪除'0'時,出現錯誤它不在列表中..從2d列表中刪除元素 - 錯誤 - Python

grid = [['0','x','x','x'], 
     ['x','x','x','x'], 
     ['x','x','x','x'], 
     ['x','x','x','x'], 
     ['x','x','x','x'], 
     ['x','x','x','x']] 

當我嘗試刪除「0」使用的代碼塊列表:

for x in range(6): 
    grid[x].remove('0') 

#(I Know That It's Inefficient) 

我得到這個錯誤:

grid[x].remove('0') 
    ValueError: list.remove(x): x not in list 

我不知道它是否是值得一提,但我嘗試許多不同的方法後,已經收到此錯誤,例如:

grid.remove('0') 
#using no loops 

i = grid[x].index('0') 
del grid[x][i] 
#using the same for loop 

i = grid.index('0') 
del grid[i] 
#in the for loop 

我收到了同樣的錯誤,所有這些嘗試,我已經改寫了「0 '在我的2D陣列中多次,誰能幫我做這個簡單的任務?

〜謝謝〜

+1

那麼你的網格中有'0'不是元素的行。什麼不清楚? –

+0

'remove(x)'與'remove('0')不一樣' –

回答

0

您的程序循環的每個行並嘗試刪除'0'。這是第一次成功,但在此之後拋出一個ValueError。請注意以下程序如何打印「已刪除!」一次:

>>> for x in range(6): 
...  grid[x].remove('0') 
...  print('removed!') 
... 
removed! 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
ValueError: list.remove(x): x not in list 

有很多方法可以從您的網格中刪除所有'0'值。下面是一個使用列表理解的一種方法:

>>> [[i for i in row if i != '0'] for row in grid] 
[['x', 'x', 'x'], ['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x']] 
+0

謝謝,這真的很有幫助 –

0

錯誤消息在這種情況下混亂,因爲它採用了可變x,這是不相關的'x'字符串。從Python文檔:

list.remove(x): Remove the first item from the list whose value is x. It is an error if there is no such item.

你的循環試圖從網格中的每一行中刪除「0」,但有些行沒有一個「0」,所以remove拋出一個錯誤。