将列表中将3的倍数的数值删除,为何我的程序无法正常显...

lists = list(range(3,31))
for vaule in lists:
      if vaule % 3 != 0: #检查列表内非3倍数数值( 用 if vaule % 3 > 0: 判断语句 也是同样结果)
          print(vaule,end= ' ')
          lists.remove(vaule)
print()
print(lists)
以此程序运行结果为:
4 7 10 13 16 19 22 25 28
[3, 5, 6, 8, 9, 11, 12, 14, 15, 17, 18, 20, 21, 23, 24, 26, 27, 29, 30]
Python初学者,求大神详解,非常感谢


请先 登录 后评论

最佳答案 2021-09-23 23:06


不要在遍历列表时进行删除操作,这里涉及到遍历时的索引问题
可以通过切片复制一个来遍历,就不会造成删除错位问题了

  1. for vaule in lists[:]:
  2.     if vaule % 3 == 0:
  3.         lists.remove(vaule)
复制代码

或者试试filter
  1. lists = filter(lambda x: x % 3 != 0, lists)
复制代码

请先 登录 后评论

其它 4 个回答

欧阳平静
有大神帮忙吗?
请先 登录 后评论
Gui銘

谢谢你的帮忙,我明白了
请先 登录 后评论
乔衣

这是一道面试送命题~
请先 登录 后评论
Swine


請恕我愚昧,你的代碼好像有誤,正確寫法好像是:

  1. list = list(filter(lambda x: x%3 != 0, range(3, 31)))
复制代码

我覺得可以有更好的寫法:
  1. # 更好的寫法
  2. list = [i for i in range(3, 31) if i%3 != 0]
复制代码
请先 登录 后评论
  • 6 关注
  • 1 收藏,554 浏览
  • 舵手 提出于 2021-09-23 23:06

相似问题