对不起,我是一个新手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'对象不可迭代。 我的代码中有什么错误?
答案 0 :(得分:1)
这里的问题是你对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]