抱歉,我是新手python编码器。我在PyCharm中编写了以下代码:
lst_3 = [1, 2, 3]
def square(lst):
lst_1 = list()
for n in lst:
lst_1.append(n**2)
return lst_1
print(list(map(square,lst_3)))
而且我有这种类型的错误:TypeError:'int'对象是不可迭代的。我的代码有什么错误?
这里的问题是您对map
正在做什么的误解。这是一个典型的例子。我创建了一个排序的“身份”函数,该函数仅回显一个数字并将其返回。我map
将此功能列出来,所以您可以看到打印出来的内容:
In [382]: def foo(x):
...: print('In foo: {}'.format(x))
...: return x
...:
In [386]: list(map(foo, [1, 2, 3]))
In foo: 1
In foo: 2
In foo: 3
Out[386]: [1, 2, 3]
请注意,这里的列表中的每个元素foo
依次由传递给map
。foo
没有收到清单。您的错误以为确实如此,因此您尝试遍历一个导致出现错误的数字。
在square
这种情况下,您需要做的定义如下:
In [387]: def square(x):
...: return x ** 2
...:
In [388]: list(map(square, [1, 2, 3]))
Out[388]: [1, 4, 9]
square
应该在收到标量的假设下工作。
或者,您可以使用lambda
达到相同的效果:
In [389]: list(map(lambda x: x ** 2, [1, 2, 3]))
Out[389]: [1, 4, 9]
请记住,这是执行此操作的功能编程方式。作为参考,使用列表理解会更便宜:
In [390]: [x ** 2 for x in [1, 2, 3]]
Out[390]: [1, 4, 9]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句