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

时间:2017-03-02 17:17:00

标签: python matrix removeall

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]]

我尝试了http://[jenkins.mydomain]:4444/grid/register和其他问题的几个不同的东西,但似乎没有任何东西适用于矩阵。那有什么好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

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

h = [[element for element in row if element] for row in h]

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

答案 1 :(得分:2)

如果您想要更改矩阵就地,可以使用如下功能进行更改。诀窍是向后遍历每一行的元素,以便连续元素的索引不会因为之前被删除而改变。

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]]