【问题标题】:removing element from 2d list - false error - Python从二维列表中删除元素 - 错误错误 - Python
【发布时间】:2017-06-25 08:20:45
【问题描述】:

所以我试图在下面的网格中将“0”换成“x”,但是当我尝试删除“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

我在所有这些尝试中都收到了相同的错误,并且我多次重写了二维数组中的“0”,谁能帮我完成这个简单的任务?

~谢谢~

【问题讨论】:

  • 好吧,您的网格中有一些行,其中0 不是元素。有什么不清楚的地方?
  • remove(x)remove('0') 不同

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


【解决方案1】:

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

list.remove(x): 从列表中删除值为 x 的第一项。 如果没有这样的项目是错误的。

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

【讨论】:

    【解决方案2】:

    您的程序正在循环 每个 行并试图删除 '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']]
    

    【讨论】:

    • 谢谢,真的很有帮助
    猜你喜欢
    • 2022-11-02
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 2018-11-20
    相关资源
    最近更新 更多