找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2672|回复: 5

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

1

主题

4

帖子

4

积分

贫民

积分
4
wsliselis 发表于 2020-2-23 20:05:28 | 显示全部楼层 |阅读模式
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初学者,求大神详解,非常感谢

回复

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
wsliselis  楼主| 发表于 2020-2-23 21:41:01 | 显示全部楼层
有大神帮忙吗?
回复 支持 反对

使用道具 举报

0

主题

27

帖子

27

积分

贫民

积分
27
艾幻翔 发表于 2020-2-24 21:32:16 | 显示全部楼层
本帖最后由 艾幻翔 于 2020-2-24 21:35 编辑

不要在遍历列表时进行删除操作,这里涉及到遍历时的索引问题
可以通过切片复制一个来遍历,就不会造成删除错位问题了
  1. for vaule in lists[:]:
  2.     if vaule % 3 == 0:
  3.         lists.remove(vaule)
复制代码

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

回复 支持 反对

使用道具 举报

1

主题

4

帖子

4

积分

贫民

积分
4
wsliselis  楼主| 发表于 2020-2-24 21:59:46 | 显示全部楼层
艾幻翔 发表于 2020-2-24 21:32
不要在遍历列表时进行删除操作,这里涉及到遍历时的索引问题
可以通过切片复制一个来遍历,就不会造成删除错 ...

谢谢你的帮忙,我明白了
回复 支持 反对

使用道具 举报

0

主题

27

帖子

27

积分

贫民

积分
27
艾幻翔 发表于 2020-2-24 22:16:15 | 显示全部楼层
wsliselis 发表于 2020-2-24 21:59
谢谢你的帮忙,我明白了

这是一道面试送命题~
回复 支持 反对

使用道具 举报

0

主题

102

帖子

102

积分

侠客

积分
102
傻眼貓咪 发表于 2021-8-5 19:48:18 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-8-5 19:49 编辑

請恕我愚昧,你的代碼好像有誤,正確寫法好像是:
  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]
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表