在 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))
我正在尝试构造一个接受以下形式的元组的 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))