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
。
谁能告诉我我做错了什么?
答案 0 :(得分:1)
您正在迭代当前长度lst
的范围。每次执行lst.remove(lst[k])
时,lst
都会变短,因此您使用的范围变得不合适。例如,如果从8个元素开始,它从0
到7
的索引包含,但如果删除元素,则最后一个索引将是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
循环不会考虑它。