Python嵌套列表创建报错:使用lambda与map实现倍数列表遇NameError
嘿,刚入门Python遇到这种变量未定义的问题太正常啦,我来帮你搞定~
首先先说说你报错的原因:应该是你的lambda函数没有接收遍历的参数,导致里面引用的x找不到定义。比如如果你的代码大概是这样的:
# 错误示例 result = list(map(lambda: [x*i for i in range(x)], range(1,6)))
这里的lambda没有参数,x完全没被赋值,Python自然不知道它指的是什么,所以抛出NameError。
接下来是正确的实现方式,我们需要让lambda接收每个乘数(从1到5)作为参数,然后生成对应的子列表:
# 正确代码 target_list = list(map(lambda n: [n * i for i in range(n)], range(1, 6))) print(target_list)
运行这段代码就能得到你想要的结果:
[[0], [0, 2], [0, 3, 6], [0, 4, 8, 12], [0, 5, 10, 15, 20]]
简单拆解下逻辑:
range(1,6)生成1到5的整数序列,作为map的遍历对象;map会把每个整数传给lambda的参数n;- 对于每个
n,range(n)生成0到n-1的整数(刚好有n个元素,完美匹配你“子列表元素个数等于对应乘数”的要求); - 用列表推导式生成
[n*i for i in range(n)],也就是n分别乘以0、1、...、n-1的结果; - 最后用
list()把map返回的迭代器转换成真正的列表,这样就能看到完整的嵌套结构啦。
内容的提问来源于stack exchange,提问作者duetette_95
相关产品推荐
相关产品推荐

