Python 如何使用lambda和map代替列表理解?如何迭代多个列表?

Python 如何使用lambda和map代替列表理解?如何迭代多个列表?,python,Python,我尝试使用lambda和map生成相同的列表,它是e,与d中相同。 然而,它不会产生一个可读的列表,而只是地图的位置 a=[1,2,3,4,5] b=[1,2,3] d=[v+w for v in a for w in b] e=list(map(lambda v: (lambda w:v+w, b),a)) 您的lambda需要有两个输入才能添加两个值(否则第一个值需要已经可以访问)。我将提交它,而不是将lambda嵌套在彼此内部,只需使用类似于itertools.product()的东西来

我尝试使用lambda和map生成相同的列表,它是e,与d中相同。 然而,它不会产生一个可读的列表,而只是地图的位置

a=[1,2,3,4,5]
b=[1,2,3]
d=[v+w for v in a for w in b]
e=list(map(lambda v: (lambda w:v+w, b),a))

您的lambda需要有两个输入才能添加两个值(否则第一个值需要已经可以访问)。我将提交它,而不是将lambda嵌套在彼此内部,只需使用类似于
itertools.product()
的东西来获取每个(
a
b
)对,然后将每个元组提交给lambda

e = list(map(lambda t:t[0]+t[1], list(itertools.product(a,b))))
在这种情况下,为什么还要为一只羔羊而烦恼呢

e = list(map(sum, list(itertools.product(a,b))))

您的lambda需要有两个输入才能添加两个值(否则第一个值需要已经可以访问)。我将提交它,而不是将lambda嵌套在彼此内部,只需使用类似于
itertools.product()
的东西来获取每个(
a
b
)对,然后将每个元组提交给lambda

e = list(map(lambda t:t[0]+t[1], list(itertools.product(a,b))))
在这种情况下,为什么还要为一只羔羊而烦恼呢

e = list(map(sum, list(itertools.product(a,b))))

实际上,您不能以任何简单的方式对
map
执行此操作,因为这里的等效操作是平面映射操作,因此您必须包含
reduce
并在内部
map
中具体化迭代器。它不会有效率,也就是说,它将是二次时间,但类似于

from functools import reduce
reduce(lambda x,y: x+y, map(lambda v: list(map(lambda w: v+w, b)), a))
会有用的。如果您想“作弊”,请使用itertools,但这将非常有效:

from itertools import chain
list(chain.from_iterable(map(lambda v: map(lambda w: v+w, b), a)))

实际上,您不能以任何简单的方式对
map
执行此操作,因为这里的等效操作是平面映射操作,因此您必须包含
reduce
并在内部
map
中具体化迭代器。它不会有效率,也就是说,它将是二次时间,但类似于

from functools import reduce
reduce(lambda x,y: x+y, map(lambda v: list(map(lambda w: v+w, b)), a))
会有用的。如果您想“作弊”,请使用itertools,但这将非常有效:

from itertools import chain
list(chain.from_iterable(map(lambda v: map(lambda w: v+w, b), a)))

我不建议对此使用lambdas(或一般情况下),但您可以仅使用内置函数来实现这一点

e=sum(list(map(lambda v:list)(map(lambda w:v+w,b)),a)),[]))
#解释
#内部映射lambda以将每个值从b添加到v
地图(λw:v+w,b))
#外部映射lambda,循环遍历a中的每个项并运行内部lambda
映射(lambda v:list)(映射(lambda w:v+w,b)),a)
#展平结果数组
总和(结果,[])

我不建议使用lambdas来实现这一点(或在一般情况下),但您只能使用内置函数来实现这一点

e=sum(list(map(lambda v:list)(map(lambda w:v+w,b)),a)),[]))
#解释
#内部映射lambda以将每个值从b添加到v
地图(λw:v+w,b))
#外部映射lambda,循环遍历a中的每个项并运行内部lambda
映射(lambda v:list)(映射(lambda w:v+w,b)),a)
#展平结果数组
总和(结果,[])

你能添加一个你想如何查看你的输出的例子吗?@Vishwas我正试图使用lambda和map生成与d中相同的列表,假设
e
应该与
d
相同,如果我读得对的话。是的,我想生成由d生成的列表,它是[2,3,4,3,4,5,4,5,6,5,6,7,6,7,8]你能添加一个你想如何查看你的输出的例子吗?@Vishwas我正试图用lambda和map生成一个与d相同的列表,它是e,与d相同——如果我读得对的话,
e
应该与
d
相同。是的,我想生成由d生成的列表,它是[2, 3, 4, 3, 4, 5, 4, 5, 6, 5, 6, 7, 6, 7, 8]