【问题标题】:How to delete certain element(s) from an array?如何从数组中删除某些元素?
【发布时间】:2019-08-15 11:45:24
【问题描述】:

我有一个二维数组,如何从中删除某些元素?

x = [[2,3,4,5,2],[5,3,6,7,9,2],[34,5,7],[2,46,7,4,36]]
for i in range(len(x)):
    for j in range(len(x[i])):
        if x[i][j] == 2:
            del x[i][j]

这将破坏数组并返回错误“列表索引超出范围”。

【问题讨论】:

  • 所以在这种情况下,您有一个列表列表。您要删除列表还是列表列表中的元素?即您要删除[2,3,4,5,2] 还是只删除[2]

标签: python-3.x list indexing del


【解决方案1】:

您可以在列表项上使用pop。比如——

>>> array = [[1,2,3,4], [6,7,8,9]]
>>> array [1].pop(3)
>>> array 
[[1, 2, 3, 4], [6, 7, 8]]

我认为这可以解决您的问题。

x = [[2,3,4,5,2],[5,3,6,7,9,2],[34,5,7],[2,46,7,4,36]]
for i in range(len(x)):
    for j in range(len(x[i])):
        if j<len(x[i]):
            if x[i][j] == 2:
                del x[i][j]

我已在本地对其进行了测试并按预期工作。希望它会有所帮助。

【讨论】:

  • 虽然这是真的,但您需要知道要删除的位置的索引。另外,在每个 list.pop() 最终需要一个相当复杂的解决方案之后,这些都会发生变化。
【解决方案2】:

在迭代列表时改变列表总是一个坏主意。只需创建一个新列表并添加除您要排除的项目之外的所有内容。如:

x = [[2,3,4,5,2],[5,3,6,7,9,2],[34,5,7],[2,46,7,4,36]]
new_array = []
temp = []
delete_val = 2

for list_ in x:
    for element in list_:
        if element != delete_val:
            temp.append(element)
    new_array.append(temp)
    temp = []

x = new_array
print(x)

编辑:通过省略列表索引使其更加 Pythonic。

与 Sai prateek 提供的解决方案相比,我认为以暂时更多的内存使用(创建新列表)为代价,这更具可读性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 2020-02-13
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    相关资源
    最近更新 更多