我最近在 Hackerrank 中收到了以下我無法回答的問題,并且我在其他任何地方都沒有找到正確的答案。
完成 lambda 映射函式:給定一個陣列,例如 [[1,2,3,-1,2],[2,4,-3]],取兩個陣列中所有非負數的平方。輸出應該是:
[1,4,9,4]
[4,16]
此外,該陣列還將在陣列的開頭包含一個附加數字,即陣列的長度。因此在上面的示例中,長度為 2,因此將通過函式傳遞的最終陣列將是 [2, [1,2,3,-1,2],[2,4,-3]]。(我們不想取初始數字的平方,在本例中為 2)
def lambdamap(arr):
final = map(
#write your lambda function here
, arr)
return final
在創建所需輸出的映射中創建一個 lambda 函式。
我嘗試了許多不同的方法,例如
map(lambda x: x**2, filter(lambda x: x>0, arr))
但這不適用于嵌套串列,例如通過函式傳遞的陣列。如果我可以提供任何資訊來幫助澄清問題,請告訴我。
uj5u.com熱心網友回復:
雖然我不確定這一點,但聽起來輸入可能包含在開頭的長度,并且需要原封不動地通過。如果是這種情況,這里有一個 lambda 函式,它將接受輸入并產生所需的輸出:
lambda i: [n**2 for n in i if n > 0] if isinstance(i, list) else i
這部分對非負數進行平方: [n**2 for n in i if n > 0]
但僅當值是串列時: if isinstance(i, list)
否則通過以下方式傳遞值: else i
這意味著這個輸入[2, [1, 2, 3, -1, 2], [2, 4, -3]]回傳這個輸出[2, [1, 4, 9, 4], [4, 16]]
uj5u.com熱心網友回復:
您必須在 lambda 函式中使用 lambda 函式。結果不是那么漂亮,但它有效:
list(map(lambda x: list(map(lambda y: y ** 2, filter(lambda z: z > 0, x))), arr[1:]))
在給定的輸入情況下,輸出:
[[1, 4, 9, 4], [4, 16]]
如果你不能使用串列切片,你可以使用filter(lambda x: isinstance(x, list), arr)而不是arr[1:].
讓我們從最里面的 lambda 函式開始,然后向外作業。為簡化起見,我們首先考慮如何在單個串列上執行此操作,稱為x:
filter(lambda z: z > 0, x)給了我們所有的積極因素x。- 然后我們使用以下方法對所有這些元素進行平方
map:map(lambda y: y ** 2, ...) - 這給了我們
map(lambda y: y ** 2, filter(lambda z: z > 0, x)).
這給了我們一些適用于單個串列的東西。我們如何擴展它以使用串列串列?好吧,每個串列的操作都以相同的方式定義,所以map再次使用!(切掉第一個元素,因為它不是串列,并將地圖物件轉換為串列以匹配所需的輸出)。
這最終給了我們:
list(map(lambda x: list(map(lambda y: y ** 2, filter(lambda z: z > 0, x))), arr[1:]))
按照原來的規定。
uj5u.com熱心網友回復:
def lambdamap(arr):
return map(
lambda x: map(
lambda y: y**2,
filter(lambda z: z > 0, x)
),
map(
lambda b: b[1],
filter(lambda a: a[0] > 0, enumerate(lst))
)
)
為了更好的可讀性,我們還可以這樣做:
def lambdamap(arr):
_arr = map(
lambda b: b[1],
filter(lambda a: a[0] > 0, enumerate(lst))
)
return map(
lambda x: map(lambda y: y**2, filter(lambda z: z > 0, x)),
_arr
)
結果
lst = [2, [1, 2, 3, -1, 2], [2, 4, -3]]
outcome = [list(x) for x in list(lambdamap(lst))]
print(outcome)
顯然,這里的串列推導只是將結果列印為串列。map()如果結果實際上需要是一個串列,我們可以將前兩個函式包裝在一個list()函式里面lambdamap()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/447795.html
上一篇:從字典串列中過濾鍵值
下一篇:按鍵更新兩個字典串列
