讓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
是我的矩陣如何從矩陣中刪除所有出現的值?
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等問題,但似乎沒有任何一個矩陣工作。有沒有什麼好的解決方案?
如果您想更改矩陣就地,您可以使用類似下面的函數。訣竅是向後遍歷每行的元素,以便連續元素的索引不會因爲先前被刪除而改變。
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]]
我會用的''而不是排'逆轉(行)[:: - 1]' –
@FelipeNardiBatista:當然,這會工作,也和更具有可讀性。然而,大多數「Pythonistas」會立即識別'[:: = 1]',因爲這是在內置「reverse()」語言之前通常使用的語言。 – martineau
是的,但截至目前,這是更具可讀性和更有效,因爲它不會複製行,它只是遍歷它 –
您可以簡單地使用列表理解:
h = [[element for element in row if element] for row in h]
所以在這裏我們h
遍歷每個row
。對於每一行我們構建一個新列表[element for element in row if element]
。這意味着,在每row
element
,我們檢查,如果它等於0
(與if element
)。如果不是,bool(element)
是True
,因此,我們添加element
到該列表。否則,我們省略element
。
'chain.from_iterable(h.tolist())'到位h'的'如果它是一個'numpy'矩陣。 –
@NickilMaveli:你爲什麼需要'連鎖'? –
這是因爲'tolist()'創建了一個額外的'list',你需要將其平鋪。 –
這是一個numpy的矩陣? – ZdaR