【问题标题】:'int' object is not iterable when trying to assign loop index [duplicate]尝试分配循环索引时,'int'对象不可迭代[重复]
【发布时间】:2018-01-02 04:29:50
【问题描述】:

这真的很奇怪,请在下面的代码 sn-p 处循环,当我删除 num=i 时,一切正常,但它会导致迭代问题。

错误代码

In [17]: prim_list=[]
    ...: for i in range(2,101):
    ...:     print i
    ...:     num=i,count=0        # line with issue
    ...:     for j in range(1,i/2):
    ...:         div=j
    ...:         if(num%div==0):
    ...:             count=count+1
    ...:     if(count==1):
    ...:         prim_list.append(num)
    ...:
2
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-17-a8dd2a52322e> in <module>()
      2 for i in range(2,101):
      3     print i
----> 4     num=i,count=0
      5     for j in range(1,i/2):
      6         div=j

TypeError: 'int' object is not iterable

工作正常

In [19]: prim_list=[]
    ...: for i in range(2,101):
    ...:     count=0              # notice num=i assignment is removed
    ...:     for j in range(1,i/2):
    ...:         div=j
    ...:         if(num%div==0):
    ...:             count=count+1
    ...:     if(count==1):
    ...:         prim_list.append(num)
    ...: print "done"
    ...:
done

我不明白的是为什么赋值导致循环迭代错误!!??

感谢任何帮助!

【问题讨论】:

  • num=i,count=0 是单个语句,表示num=(i,count)=0。解包赋值不适用于整数。
  • @MartijnPieters 可能是我把问题放错了,但我肯定想理解它抛出的错误,python 是如何在内部做的,赋值和错误语句不匹配!!

标签: python loops variable-assignment


【解决方案1】:

您正在使用链式分配:

num=i,count=0

num = (i, count) = 0

分配num = 0(i, count) = 0 的位置。因为0 不是长度为 2 的可迭代对象,所以不能将其分配给目标元组。

使用

num, count = i, 0

num = i
count = 0

改为。

【讨论】:

  • 哦,伙计...python 的简单性永远不会令人惊讶..谢谢,会在适当的时候接受(但在我的辩护中,得到 2 票反对的问题并不是那么愚蠢 i> :D ) !
  • 或者,num = i; count = 0(注意分号而不是逗号,这使它成为两个单独的语句)
【解决方案2】:

这里发生的事情是您误解了逗号运算符。与 C 不同,它不允许您执行多个语句。它所做的是解构赋值,例如:

a, b = [1, 2]
# a == 1; b == 2

所以,num=i,count=0 更像是:

num = i, count = 0
# equivalent to:
num = 0
i, count = 0

这没有意义。

分号 (;) 符合您的预期,但使用换行符:

num = i
count = 0

【讨论】:

    猜你喜欢
    • 2011-08-09
    • 1970-01-01
    • 2017-07-28
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    相关资源
    最近更新 更多