这真的很奇怪,请在下面的代码片段中循环,当我删除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
我不理解为什么赋值导致循环迭代错误!! ??
任何帮助表示赞赏!
答案 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