大家好我是Python的新手,并且一直在尝试如何在包含1到4的倍数的列表中创建列表,每个列表包含与它们乘以的数量相同的倍数。特别是,应用lambda
和map
函数。
[[0],
[0, 2],
[0, 3, 6],
[0, 4, 8, 12],
[0, 5, 10, 15, 20]]
我尝试了几种方法,这是我目前正在处理的代码,但是我收到了NameError: name 'x' is not defined
错误。如果有人能指出我忽略的错误,我将非常感激!
list_1 = [[0], [0,1], [0,1,2]]
result = list(map(lambda x, i ,j ,k: x[i][j] * k, list_1, range(3),items in x[i], range(1,3)))
print(result)
答案 0 :(得分:0)
您获得了NameError
,因为map
的一个参数是items in x[i]
,此时没有定义任何内容。请记住,lambda等同于函数定义; x
和i
是传入的参数的函数名称 - 它们不能用于定义其他参数,因为您在该范围之外执行此操作。 (对于items
,它不会出现在代码中的任何其他位置,因此当然没有定义。)
从根本上说,这种逻辑都没有意义。特别是:由于您正在尝试生成嵌套数据结构,因此您应该期望嵌套map
调用。
以较小的步骤执行此操作。首先尝试编写代码,例如[0, 4, 8, 12]
将4
作为输入。然后你可以编写重复调用 的代码来制作你想要的列表。
答案 1 :(得分:0)
您当前的代码对于此问题来说过于复杂。相反,使用列表推导和单个嵌套map
:
new_result = [list(map(lambda x:i*x, range(i))) for i in range(1, 6)]
输出:
[[0], [0, 2], [0, 3, 6], [0, 4, 8, 12], [0, 5, 10, 15, 20]]
答案 2 :(得分:0)
我不知道在你的练习中使用map和lambda 是是一个约束,但是你 顺便说一句,不需要它们
>>> [[i*j for j in range(i)] for i in range(1,6)]
[[0], [0, 2], [0, 3, 6], [0, 4, 8, 12], [0, 5, 10, 15, 20]]
答案 3 :(得分:0)
如果您想要纯粹的函数式编程,那么您可以试试这个:
print(list(map(lambda x:list(map(lambda z:z*x,list(range(x)))),range(1,6))))
输出:
[[0], [0, 2], [0, 3, 6], [0, 4, 8, 12], [0, 5, 10, 15, 20]]