新手求助!一个关于素数的提问
各位大神麻烦帮忙看下 为什么输出的时候13没有被移除{:10_245:}先贴问题要求:
编写程序,实现将列表 ls =
中的素数去除,并输出去除素数后列表 ls 的元素个数。
下面是我写的代码
ls =
for i in ls:
for j in range(2,i):
if i%j==0:
break
else:
ls.remove(i)
print(ls)
print('长度为:',len(ls))
运行代码之后得到的结果是
长度为: 10
为什么13还在啊… 本帖最后由 qq1151985918 于 2021-1-12 20:48 编辑
看你这段代码
ls =
for i in ls:
for j in range(2,i):
if i%j==0:
break
else:
ls.remove(i)
#问题就出在ls.remove(i)了
#当你在ls.remove之后ls已经发生改变
#随之变动的还有最外围的for循环
#你可以尝试换一种思路
#不对ls列表进行操作新建一个空列表
#讲非素数添加进空列表
print(ls)
print('长度为:',len(ls))
#-----------------------------------
print('\n-----------------------------------\n')
ls =
newls = []
for i in ls:
for j in range(2,i):
if i % j == 0:
newls.append(i)#这样就可以了
break
print(newls)
print('长度为:',len(newls))
第二行改为 for i in tuple(ls): 本帖最后由 jackz007 于 2021-1-12 20:55 编辑
这一句
for i in ls:
改为
for i in ls[:]:# 如果列表在循环中有元素的增减,则必须用列表的副本来控制循环
你得在切片上遍历列表呀,不然一边遍历一边从里面移除数据会导致少遍历几个元素
这里附上两种方案:
ls =
res = []
for i in ls:
for j in range(2,i):
if i%j==0:
res.append(i)
break
print(res)
print('长度为:',len(res))
ls =
for i in ls[:]:
for j in range(2,i):
if i%j==0:
break
else:
if i in ls:
ls.remove(i)
print(ls)
print('长度为:',len(ls)) 明白了!谢谢大家!!!
页:
[1]