我怎樣才能寫一段代碼,在for回圈中永久地格式化[a,b,c]值,并將負值變成零。map lambda函式formater如期作業,但我在for回圈中寫過陣列。下面的代碼不作業,我怎樣才能得到預期的輸出呢?
import numpy as np
a = np. array([2323,34,12, -23,12, 4,-33,- 2, -1,11,-2] )
b = np. array([12,-23-1, -1,-3,-12] )
c = np. array([23,45,3, 13,-1992,5] )
format_number = lambda n: n if n % 1 else int(n)
for count,formater in enumerate([a, b, c])。
formater = list(map(lambda n。0 if n < 0 else format_number(n), formater)
formater[count]= formater
輸出:
[2323 34 12 -23 12 4 -33 -2 -1 11 -2]
[12 -24 -1 -3 -12]
[23 45 3 13 -1992 5]
預期輸出:
[2323, 34, 12, 0, 12, 4, 0, 0, 0, 11, 0]
[12, 0, 0, 0]
[23, 45, 3, 13, 0, 5]
uj5u.com熱心網友回復:
用np.vectorize會更好:
format_number = lambda n。n if n % 1 else int(n)。
for count, formater in enumerate([a, b, c])。
formater[formater < 0] =0
formatter = np.vectorize(format_number)(formater)
print(formater.tolist()
要修復你的代碼,請執行:
format_number = lambda n。n if n % 1 else int(n)
for count,formater in enumerate([a, b, c]):
formater = list(map(lambda n。0 if n < 0 else format_number(n), formater)
print(formater)
兩種輸出:
[2323, 34, 12, 0, 12, 4, 0, 0, 0, 11, 0]
[12, 0, 0, 0]
[23, 45, 3, 13, 0, 5]
uj5u.com熱心網友回復:
你想做的事應該對串列和陣列都有效。
在[163]。a = [2323,34,12, -23,12, 4,-33,-2,-1, 11,-2]
... : b = [12,-23-1。 -1,-3,-12]
...: c = np. array([23,45,3, 13,-1992,5] )
將變數收集到一個串列中:
在 [164]: alist = [a,b,c]
在[165]: alist
Out[165]。
[[2323, 34, 12, -23, 12, 4, -33, - 2, -1, 11, -2】。]
[12, -24, -1, -3, -12] 。
array([ 23, 45, 3, 13, -1992, 5]) ]
如果我像你那樣迭代,并給item分配一個新的物件,在alist中沒有任何變化。
在[166]。for item in alist:
...: item = [1,2, 3]
...:
在[167]: alist
出來[167]。
[[2323, 34, 12, -23, 12。4, -33, - 2, -1, 11, -2】。]
[12, -24, -1, -3, -12] 。
array([ 23, 45, 3, 13, -1992, 5]) ]
這一點很關鍵;當對一個串列進行迭代時,你不能替換迭代變數;否則你就會失去與源的聯系。
相反,我們修改item,就地改變它。
在 [168]。for item in alist:
...: for i,v in enumerate( item)。
...: if v<0:
...:
...:
現在變化出現在串列中:
在[169]: alist
輸出[169]。
[[2323, 34, 12, 0, 12, 4, 0, 0, 0, 11, 0】。]
[12, 0, 0, 0] 。
array([23, 45, 3, 13, 0, 5]) ]
驗證這是否改變了原始串列/陣列:
在[170]: a
輸出[170]。[2323, 34, 12, 0, 12, 4, 0, 0, 0, 11, 0]
讓我們試試更接近于你的代碼的東西:
在 [171]: format_number = lambda n。n if n % 1 else int(n)
在[174]。formater = [2323,34,12, -23,12, 4,-33,-2,-1, 11,-2]
在 [175]: new = list(map(lambda n: 0 if n < 0 else format_number(n), formater)
在[176]: new
輸出[176]。[2323, 34, 12, 0, 12, 4, 0, 0, 0, 11, 0]
用list(map())我已經創建了一個新的串列。 如果想在一個回圈中使用它,就像我對item所做的那樣,我必須修改原來的內容,例如,
在 [177]: formater[:] = new
在[178]: formater
Out[178]。[2323, 34, 12, 0, 12, 4, 0, 0, 0, 11, 0]
將此應用于原始變數:
在[179]。a = [2323,34,12, -23,12, 4,-33,-2,-1, 11,-2]
... : b = [12,-23-1。 -1,-3,-12]
...: c = np. array([23,45,3, 13,-1992,5] )
在[180]中:alist = [a,b,c]
在[181]中。for item in alist:
...: item[:]=list(map(lambda n。0 if n < 0 else format_number(n), item)
...:
在[182]: alist
輸出[182]。
[[2323, 34, 12, 0, 12, 4, 0, 0, 0, 11, 0】。]
[12, 0, 0, 0] 。
array([23, 45, 3, 13, 0, 5]) ]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/309476.html
標籤:
下一篇:根據資料框架的條件過濾資料
