如何从矩阵中删除所有出现的值?

How to delete all occurrences of a value from a matrix?

h成为我的矩阵

h=[[0,346,34,6,7,0,0,34634,6,0],[2352,205230,523,50,5023,502,350,0,0]]

我想删除 h 中的所有零。

所以结果应该是:

h=[[346,34,6,7,34634,6],[2352,205230,523,50,5023,502,350]]

我尝试了 HERE 和其他问题中的几种不同方法,但似乎对矩阵不起作用。有什么好的解决办法吗?

您可以简单地使用列表理解:

h = [[element for element in <b>row</b> if element] <b>for row in h</b>]

所以这里我们遍历 h 中的每个 row。对于每一行,我们构建一个新列表 [element for element in row if element]。这意味着对于 row 中的每个 element,我们检查它是否等于 0if element)。如果不是,则 bool(element)True,因此我们将 element 添加到该列表。否则我们省略 element.

如果您想就地更改矩阵,您可以使用如下函数来完成。诀窍是向后遍历每一行的元素,这样连续元素的索引就不会因为之前的元素被删除而改变。

def remove_zeros(matrix):
    for row in matrix:
        length = len(row)-1
        for i, elem in enumerate(reversed(row)):
            if not elem:  # zero value?
                row.pop(length-i)

h = [[0, 346, 34, 6, 7, 0, 0, 34634, 6, 0], [2352, 205230, 523, 50, 5023, 502, 350, 0, 0]]

remove_zeros(h)

print(h)  # -> [[346, 34, 6, 7, 34634, 6], [2352, 205230, 523, 50, 5023, 502, 350]]