列表索引超出范围错误。蟒蛇

时间:2015-11-10 03:38:48

标签: python python-3.x

lst = []
for i in range(1,13196):
    if 13195 % i == 0:
        lst.append(i)
for k in range(len(lst)):
    for j in range(1,lst[k]):
        if lst[k] % j != 0:
            lst.remove(lst[k])
print(lst)

当我运行此代码时,它会显示lst[k] % j != 0: List index out of range。 谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:1)

您正在迭代当前长度lst的范围。每次执行lst.remove(lst[k])时,lst都会变短,因此您使用的范围变得不合适。例如,如果从8个元素开始,它从07的索引包含,但如果删除元素,则最后一个索引将是6,而不是{{ 1}}。

解决此问题的最简单方法是简单地创建一个新的7

list

也就是说,这段代码消除了每个不能被小于该数字的正整数均分的数字,这可以理解地产生lst = [] for i in range(1,13196): if 13195 % i == 0: lst.append(i) result = lst[:] # create a copy to work with for k in range(len(lst)): for j in range(1,lst[k]): if lst[k] % j != 0 and lst[k] in result: # check that it's there before removal result.remove(lst[k]) print(result) 的结果。如果这不是你想要的,你将不得不再看看你的算法。

答案 1 :(得分:0)

lst = []
lst2 = []
for i in range(1,13196):
    if 13195 % i == 0:
        lst.append(i)
        lst2.append(i)

for k in range(len(lst)):
    for j in range(1,lst[k]):
        if lst[k] % j != 0: 
            lst2.remove(lst[k])

print lst2

试一试。您的问题是您正在迭代原始列表的值。当您删除原始列表的某些部分时,此值的长度会缩短,但for循环不会考虑它。