TypeError:' int'对象在map函数中不可迭代

时间:2017-11-13 19:43:11

标签: python python-3.x typeerror

对不起,我是一个新手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'对象不可迭代。 我的代码中有什么错误?

1 个答案:

答案 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]