簡體   English   中英

使用 lambda 列表理解

[英]List comprehension with lambda

如何使用 lambda 和 list-comprehension 重寫此循環?

n = 17
e = 0
for i in range(0, n):
    e += 1 / factorial(i)
print(e)

到目前為止,我已經嘗試過這個......但它不起作用

lst = [item for item in map(lambda e: e + 1/factorial(i), range(0,n))])

myMap = map(lambda e: e + 1/factorial(i), range(0,n))

我會為此使用 sum 函數。 我也不明白你為什么將 map 函數與列表理解一起使用。

e = sum([1 / factorial(i) for i in range(n)])

如您所見,列表推導也可用於修改返回的列表。 您不需要使用 map 和 lambda 做復雜且不工作的事情。

完整地說,map 函數返回列表中所有值的總和。 例如:

>>> l = [1, 2, 3, 4, 5, 6]
>>>
>>> sum(l)
21

當你的n值變大,需要開始關注效率時,可以使用如下代碼:

sum(1 / factorial(i) for i in range(n))

我在這里刪除了方括號。 這意味着 python 創建了一個生成器實例而不是列表實例。 生成器沒有預先計算其所有值,而是僅在需要時才計算它們。 這比列表更有效,列表首先計算所有值,然后迭代它們。

由於列表推導和 lambda在這種情況下不太適合,這里有一些函數式編程基礎方法,希望能明確區別(推導表達式之間):

reduce方法:列表通過函數收縮為“數字”

from math import factorial
from functools import reduce

n = 10
reduce(lambda i, j: i + 1/factorial(j), range(n), 0)
#2.7182815255731922

此處與map :連續的一對一對應關系,其中逐項應用函數。 最后, sum函數將列表壓縮成一個“數字”。

注意:它應該從右到左閱讀,應用階乘,然后是倒數並求和。

sum(map(int(-1).__rpow__, map(factorial, range(n))))
#2.7182815255731922

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM