我收到一条错误消息,提示“ IndexError:列表索引超出范围” 与我正在使用的While循环。请帮助。
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
答案 0 :(得分:1)
您的列表没有索引,因为在最后一次迭代中nums
的长度为0,即列表为空,并且您正在引用第一个元素。
因为您处于for循环中,nums.remove(index)
会删除索引,但不会更新列表。
因此,nums
仍然引用前一个nums
,并且其长度已更改。
因此,请使用切片:
.remove()
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)
上面的代码将为您提供范围内的质数。 如果有任何可以改进的地方,请发表评论
答案 1 :(得分:0)
使用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