if循环中的语句不起作用[重复]
这个问题已经在这里有了答案 :
从列表中删除项目并对其进行迭代时出现奇怪的结果 (4个答案)
5年前关闭。
对于我的一生,我无法弄清楚为什么我的IF语句没有受到攻击。在很多情况下,n的余数//放在结果列表中的最后一个数字为0。
n = 100
numbers = range(2, n)
results = []
results.append(numbers.pop(0))
print numbers
for n in numbers:
if n % results[-1] == 0:
print "If statement", numbers
numbers.remove(n)
else:
print "Else statement", numbers
numbers.remove(n)
-
问题是您要在迭代列表时修改列表,因此所有偶数都将被跳过。因此,
if
条件总是False
。该
for
循环跟踪指数的,所以当你在索引中删除的项目i
在,下一个项目i+1
个位置转变为当前指数(i
),因此在接下来的迭代中,你居然会挑i+2
个项。for n in numbers[:]: #iterate over a shallow copy of list if n % results[-1] == 0: print "If statement", numbers numbers.remove(n) else: print "Else statement", numbers numbers.remove(n)
例:
>>> lis = range(3,15) >>> for x in lis: ... print x ... lis.remove(x) ... 3 5 7 9 11 13