如何从矩阵中删除所有出现的值?
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
,我们检查它是否等于 0
(if 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]]
让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
,我们检查它是否等于 0
(if 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]]