【问题标题】:TypeError: 'int' object is not iterable, why it's happeningTypeError:'int'对象不可迭代,为什么会发生
【发布时间】:2013-07-12 19:14:18
【问题描述】:

这实际上是三个例子。

>>> result = []
>>> for k in range(10):
>>>    result += k*k

>>> result = []
>>> for k in range(10):
>>>    result.append(k*k)

>>> result = [k*k for k in range(10)]

第一个出错了。如下所示的错误打印

TypeError: 'int' object is not iterable

但是,第二个和第三个效果很好。

我无法理解这三个语句之间的区别。

【问题讨论】:

标签: python int iterable-unpacking


【解决方案1】:

我知道这太旧了,但对于任何登陆这里的人来说,这是一个简单的可重现示例来说明“int”对象不可迭代”错误。

        lst1 =[3,4,5,6]
        def square(lst1):
            lst2  = []
            for num in lst1:
                lst2.append(num**2)
            return lst2
        #print(list(map(square,lst1))) # this will raise ''int' object is not iterable'
        print(list(map(square,list(lst1))))  # here making lst1 as list of list fixs the iterable problem i.e lst1 =[[3,4,5,6]]

【讨论】:

    【解决方案2】:

    您正在迭代一个整数而不是一个字符串或序列。 对于result += k*k,仅当 k 是字符串/序列输入时,它才会为真,但如果 k 是数字,则结果将是连续求和。 对于result.append(k*k),无论k是字符串还是数字,结果都是依次相加。

    【讨论】:

      【解决方案3】:

      result 是一个列表对象(最初没有条目)。

      列表中的+= 运算符基本上与在右侧调用其extend 方法相同。 (有一些细微的区别,这里不相关,但请参阅python2 programming FAQ 了解详细信息。)列表的extend 方法尝试迭代(单个)参数,而int 不可迭代。

      (同时,当然,append 方法只是添加了它的(单个)参数,所以效果很好。列表理解在内部是完全不同的,并且是最有效的方法,因为列表构建完成了很多少一些内部大惊小怪。)

      【讨论】:

        【解决方案4】:

        列表对象上的就地添加使用可迭代的元素扩展列表。 k*k 不是可迭代的,因此您不能真正将其“添加”到列表中。

        您需要将k*k 设为可迭代:

        result += [k*k]
        

        【讨论】:

          猜你喜欢
          • 2017-09-11
          • 1970-01-01
          • 2023-01-22
          • 1970-01-01
          • 1970-01-01
          • 2018-09-29
          • 2020-02-26
          • 2015-04-06
          相关资源
          最近更新 更多