python列表问题求教

bron1117 2018-11-08 12:01:44
代码如下:
import random
import math
lista=[]
for i in range(3):
lista.append(random.randint(100,999))
def isPrime(n):
if n <= 1:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
for i in range(len(lista)):
if isPrime(lista[i]):
lista.pop(i)
print(lista)


为何最后会提示
Traceback (most recent call last):
File "C:\Users\爱吃煎饼的阿黄\Desktop\e.py", line 14, in <module>
if isPrime(lista[i]):
IndexError: list index out of range
...全文
35 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
我不是个菜鸟 2018-11-20
  • 打赏
  • 举报
回复
for循环时不能对列表进行增删操作
尘封记忆 2018-11-09
  • 打赏
  • 举报
回复
首先,pop是根据索引来进行删除的,而不是值,如果要删除值的话就要用 remove。 for 遍历的索引(i)是递增的,对第3个值pop时,i=2,这时候lista里面实际只有一个值。就会出现 list index out of range 比如说: lista = [a,b,c] 删除了(pop) 0-a,1-b 这时候剩下[c],再用i=2的索引查询就会 超出list范围。
夏虫EG 2018-11-08
  • 打赏
  • 举报
回复
楼上说的正确,pop后list长度减少,但for循环中len函数已经确定了长度,所以会超范围,可以使用for i in lista:,另外,pop的参数是不要弹出的数,而不是所在的下标吧
手无护鸡之力 2018-11-08
  • 打赏
  • 举报
回复
因为你用 lista.pop(i) 修改了lista, 长度变了

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧