Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 循环中的if语句不工作_Python - Fatal编程技术网

Python 循环中的if语句不工作

Python 循环中的if语句不工作,python,Python,就我的一生而言,我不明白为什么我的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.r

就我的一生而言,我不明白为什么我的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位置的下一个项目将移动到当前索引xi,因此在下一次迭代中,您将实际拾取i+2项目

例如:

>>> lis  = range(3,15)
>>> for x in lis:
...     print x
...     lis.remove(x)
...     
3
5
7
9
11
13

问题是您在对列表进行迭代时正在修改它,所以所有偶数都被跳过。因此,if条件始终为False

for循环跟踪索引,因此当您删除索引i处的项目时,位于i+1位置的下一个项目将移动到当前索引xi,因此在下一次迭代中,您将实际拾取i+2项目

例如:

>>> lis  = range(3,15)
>>> for x in lis:
...     print x
...     lis.remove(x)
...     
3
5
7
9
11
13

不要在要从中删除项目的列表上循环。for循环创建一个列表迭代器,该迭代器通过递增计数器来跟踪当前项。但缩小列表意味着计数器将在循环迭代之间指向错误的项:

>>> lst = range(5)
>>> for i in lst:
...     lst.remove(i)
...     print i
... 
0
2
4
>>> lst
[1, 3]
当您从列表[0,1,2,3,4]中删除0时,计数器会增加到项目1,而现在更改的列表[1,2,3,4]中的项目1指向值2。从列表中删除2,迭代器计数将增加到2,在修改后的列表[1,3,4]中,这意味着循环中的下一个值是4,之后迭代器计数器的计数将超过结束,循环终止

如果要从列表中删除所有项目,请使用while循环:

while numbers:
    n = numbers.pop()
    # do something with `n`
如果要删除某些项目,另一个选项是创建浅层副本:

for n in numbers[:]:
     # ....

现在,您可以根据自己的内容更改数字,因为for循环将在副本上迭代。

不要在要从中删除项目的列表上循环。for循环创建一个列表迭代器,该迭代器通过递增计数器来跟踪当前项。但缩小列表意味着计数器将在循环迭代之间指向错误的项:

>>> lst = range(5)
>>> for i in lst:
...     lst.remove(i)
...     print i
... 
0
2
4
>>> lst
[1, 3]
当您从列表[0,1,2,3,4]中删除0时,计数器会增加到项目1,而现在更改的列表[1,2,3,4]中的项目1指向值2。从列表中删除2,迭代器计数将增加到2,在修改后的列表[1,3,4]中,这意味着循环中的下一个值是4,之后迭代器计数器的计数将超过结束,循环终止

如果要从列表中删除所有项目,请使用while循环:

while numbers:
    n = numbers.pop()
    # do something with `n`
如果要删除某些项目,另一个选项是创建浅层副本:

for n in numbers[:]:
     # ....

现在,您可以将数字更改为心形内容,因为for循环将在副本上迭代。

列表修改的另一种方法是执行两个过程:

mod0 = []
for n in numbers:
    mod0.append(n % results[-1] == 0)
print [ n for n,m in zip(numbers, mod0) if m ]
print [ n for n,m in zip(numbers, mod0) if not m ]

列表修改的另一种方法是执行两个过程:

mod0 = []
for n in numbers:
    mod0.append(n % results[-1] == 0)
print [ n for n,m in zip(numbers, mod0) if m ]
print [ n for n,m in zip(numbers, mod0) if not m ]

正如其他人所回答的那样,问题在于您正在迭代的列表的修改。我认为你真正想做的事情可以这样做:

results = [2]
numbers = []

n=100
for n in range(3, n):
    if n % results[-1] == 0:
        results.append(n)
    else:
        numbers.append(n)
这是一种获得二次幂的方法。另一种方法是:

results = [2**n for n in range(1,7)]

正如其他人所回答的那样,问题在于您正在迭代的列表的修改。我认为你真正想做的事情可以这样做:

results = [2]
numbers = []

n=100
for n in range(3, n):
    if n % results[-1] == 0:
        results.append(n)
    else:
        numbers.append(n)
这是一种获得二次幂的方法。另一种方法是:

results = [2**n for n in range(1,7)]

如果您想在循环列表时修改列表,请与我的小朋友会面:


如果您想在循环列表时修改列表,请与我的小朋友会面:


尝试在for之后和if之后添加调试输出,例如,print n print results[-1]在迭代过程中从数字中删除项目。这将导致错误,因为迭代器计数器将递增,而您的循环将“跳过”项。调用list.remove会对列表产生副作用-这会导致什么异常?我会在不使用remove的情况下重写它-与remove相反的是保留那些应该保留的内容:D在两个分支中删除似乎也很奇怪=删除所有内容,但是..尝试在for之后和if之后添加调试输出,例如print n print results[-1]在对数字进行迭代时,您正在从数字中删除项目。这将导致错误,因为迭代器计数器将递增,而您的循环将“跳过”项。调用list.remove会对列表产生副作用-这会导致什么异常?我会在不使用remove的情况下重写这个,与remove相反的是保留那些应该保留的东西:D在两个分支中删除似乎也很奇怪=删除所有内容,但是..有一个内置的方法来做这件事似乎很有用。我曾多次需要类似的东西。有一个内置的方法似乎很有用。我需要这样的东西很多次。