从2d列表中删除元素 - 错误错误 - Python

时间:2017-02-07 22:03:12

标签: python python-3.x multidimensional-array

所以我试图在下面的网格中为'x'换出'0',但是当我尝试删除'0'时,我收到错误,说它不在列表中..

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

我收到了所有这些尝试的同样错误,我多次在2D数组中重写'0',有人可以帮我做这个简单的任务吗?

〜谢谢〜

2 个答案:

答案 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']]

答案 1 :(得分:0)

在这种情况下,错误消息令人困惑,因为它使用的变量x与您的'x'字符串无关。来自python docs:

  

list.remove(X):   从列表中删除值为x的第一个项目。 如果没有此类项目,则会出错。

您的循环尝试从网格的每一行中删除“0”,但某些行没有“0”,因此remove会抛出错误。