如何使用lambda和map而不是列表理解来迭代多个列表?

时间:2019-07-19 18:43:51

标签: python

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

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))

3 个答案:

答案 0 :(得分:1)

您的lambda需要具有两个输入才能添加两个值(否则第一个值必须已经可以访问)。我会提出这一点,而不是在彼此之间嵌套lambda,而只是使用类似itertools.product()的方法来获取每个(ab)对,然后将每个元组提交给lambda。 / p>

e = list(map(lambda t:t[0]+t[1], list(itertools.product(a,b))))

在这种情况下,为什么还要烦恼lambda?

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

答案 1 :(得分:1)

我不建议为此(或通常)使用lambda,但是您只能使用内置函数来做到这一点。

e = sum(list(map(lambda v: list(map(lambda w: v + w, b)), a)), [])

# Explanation
# Inner map lambda to add each value from b to v
map(lambda w: v + w, b))

# Outer map lambda that loops through each item in a and runs the inner lambda
map(lambda v: list(map(lambda w: v + w, b)), a)

# Flatten result array
sum(result, [])

答案 2 :(得分:0)

实际上,您不能仅以任何简单的方式使用Route来完成此操作,因为此处的等效操作将是 flat-map 操作,因此您必须包含一个{ {1}},并在内部animated.div中实现迭代器。效率不高,即将是二次时间,但类似

map

会工作。如果您想“作弊”,请使用itertools,但这 会很有效:

reduce