在 lambda 函数中展平列表

Flattening a list inside a lambda function

我正在尝试构造一个接受以下形式的元组的 lambda 表达式:(a, b[], c),其中 b 是需要展平的元素列表。

例如,表达式的输出应该是: (a, b[0], c), (a, b[1], c), (a, b[2], c) ...

我已经尝试研究和寻找与我刚才描述的情况类似的生成器表达式,但我无法真正解决这个问题。

如果有人能指出正确的方向,我将不胜感激。

因为您需要 lambda 函数而不是常规函数,所以有几个选项。 不使用递归,使用像 map():

这样的内置函数似乎最简单
lambda a, b, c: map(lambda d: (a, d, c), b)

map() 将对 b 的每个元素应用 lambda d 函数,并生成您要查找的元组列表

您可以使用 itertools.repeat()zip()b 中的每个元素创建所需的元组:

from itertools import repeat

f = lambda a, b, c: zip(repeat(a), b, repeat(c))

print(*f(1, [2, 3, 4], 5))

这输出:

(1, 2, 5) (1, 3, 5) (1, 4, 5)

一个 lambda 函数返回一个由列表长度参数化的列表理解。

func = lambda a, b, c: [(a, b[i], c) for i in range(len(b))]

print(func(1, [2, 3, 4], 5))