' INT'尝试分配循环索引时,object不可迭代

时间:2017-07-26 17:36:50

标签: python loops variable-assignment

这真的很奇怪,请在下面的代码片段中循环,当我删除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

我不理解为什么赋值导致循环迭代错误!! ??

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:6)

您正在使用链式作业:

num=i,count=0

num = (i, count) = 0

分配了num = 0(i, count) = 0的位置。由于0不是长度为2的可迭代,因此无法将其分配给目标元组。

使用

num, count = i, 0

num = i
count = 0

代替。

答案 1 :(得分:1)

这里发生的是你误解了逗号运算符。与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