所以我试图在下面的网格中为'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',有人可以帮我做这个简单的任务吗?
〜谢谢〜
答案 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
会抛出错误。