for循环运行无限python

时间:2016-06-09 16:37:47

标签: python

尝试找到问题需要5个小时,但无法确定循环for fn in L运行无限的原因。

L=[]
N=int(raw_input())
for i in range(0,N):
    L.append(list(raw_input().split()))
print L

for fn in L:
    if 'insert'==fn[0]:
        L.insert(int(fn[1]),int(fn[2]))
    elif 'append'==fn[0]:
        L.append(int(fn[1]))
    elif 'remove'==fn[0]:
        L.remove(int(fn[1]))
    elif 'pop'==fn[0]:
        L.pop(int(fn[1]))
    elif 'index'==fn[0]:
        L.index(int(fn[1])) 
    elif 'count'==fn[0]:
        L.count(int(fn[1]))
    elif 'sort'==fn[0]:
        L.sort()     
    elif 'reverse'==fn[0]:
        L.reverse() 
    else :
        print  L

提供给列表的输入:

12
insert 0 5
insert 1 10
insert 0 6
print 
remove 6
append 9
append 1
sort 
print
pop
reverse
print

3 个答案:

答案 0 :(得分:7)

你在循环中改变你的列表。结果将是非常不可预测的。您可以改为迭代列表的一部分:

for fn in L[:]:
    # your code here
    pass

这样,当浅拷贝(切片)中的项目耗尽时,循环终止。

答案 1 :(得分:2)

在迭代列表元素时插入/删除元素。您还可以通过反转列表来更改列表。两者都是列表中的变异操作,在迭代期间是不允许的。在这种情况下,行为未指定。

for fn in L:
    if ...:
        L.insert(...)

答案 2 :(得分:1)

你改变用于循环的对象...并且最好你反转它:p reverse< - reverse - >反转< - 反向 - >

:P