if循环中的语句不起作用[重复]

发布于 2021-01-29 15:03:35

这个问题已经在这里有了答案

从列表中删除项目并对其进行迭代时出现奇怪的结果 (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)
关注者
0
被浏览
86
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    问题是您要在迭代列表时修改列表,因此所有偶数都将被跳过。因此,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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看