map、lambda 和 append.. 为什么不起作用?

新手上路,请多包涵

所以我正在尝试这样做。

 a = []
map(lambda x: a.append(x),(i for i in range(1,5)))

我知道 map 需要一个函数,但为什么它不附加到列表中呢?还是 append 不是函数?然而打印 a 结果为 a 仍然是空的

现在一件有趣的事是这行得通

a = []

[a.append(i) for i in range(5)]
print(a)

他们基本上不是在“说”同样的话吗?

就好像列表理解变成了某种混合的列表理解函数

那么为什么 lambda 和 map 方法不起作用呢?

原文由 Zion 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

我假设您使用的是 Python 3.x,您的带有 map() 的代码不起作用的实际原因是因为在 Python 3.x 中,map() 返回一个生成器对象,除非您迭代 map 返回的生成器对象() 时,lambda 函数不会被调用。尝试执行 list(map(…)) ,您应该会看到填充。

话虽这么说,你在做什么没有多大意义,你可以使用 -

 a = list(range(5))

原文由 Anand S Kumar 发布,翻译遵循 CC BY-SA 3.0 许可协议

append() 返回 None 因此将它与 map 函数结合使用是没有意义的。一个简单的 for 循环就足够了:

 a = []
for i in range(5):
    a.append(i)
print a

或者,如果您想使用列表理解/地图功能;

 a = range(5) # Python 2.x
a = list(range(5)) # Python 3.x
a = [i for i in range(5)]
a = map(lambda i: i, range(5)) # Python 2.x
a = list(map(lambda i: i, range(5))) # Python 3.x


 [a.append(i) for i in range(5)]

上面的代码也进行了追加,但是它还创建了一个列表 None 值的大小为 range(5) 这完全是一种内存浪费。

 >>> a = []
>>> b = [a.append(i) for i in range(5)]
>>> print a
[0, 1, 2, 3, 4]
>>> print b
[None, None, None, None, None]

原文由 Ozgur Vatansever 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题