[英]What am I doing wrong with the While Loop here?
我正在使用的While循环收到一个错误,提示“ IndexError:列表索引超出范围”。 请帮助。
from array import *
limit = 20
limitn = limit+1
p = 2
nums = range(p,limitn)
primes = []
while p < limitn+1:
for i in nums:
if i == p:
primes.append(i)
if i%p == 0:
nums.remove(i)
p = nums[0]
print primes
您的列表没有索引,因为在最后一次迭代中, nums
的长度为0,即列表为空,并且您正在引用第一个元素。
因为您在for循环中, nums.remove(index)
删除了索引,但不更新列表。
因此, nums
仍然引用先前的nums
并且其长度已更改。
因此,代替.remove()
使用slice:
nums = nums[: nums.index(i)] + nums[nums.index(i) + 1 :]
slice运算符创建一个新的nums
删除元素i
。
您的寻找素数的程序不是一个好方法
for i in range(p, limitn):
for j in range(2, i):
if i % j == 0:
break
else:
primes.append(i)
上面的代码将为您提供范围内的素数。 如果有什么可以改善的地方请发表评论
使用nums.remove(i)
, nums
将是[]
。
所以, IndexError: List index out of range
是没有问题的
from array import *
limit = 20
limitn = limit+1
p = 2
nums = range(p,limitn)
primes = []
while p < limitn+1:
for i in nums:
if i == p:
primes.append(i)
if i%p == 0:
print(i)
nums.remove(i)
# Check nums array size
if len(nums) == 0:
break
p = nums[0]
print primes
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.