鱼C论坛

 找回密码
 立即注册
查看: 2594|回复: 17

[已解决]a . remove ( b )

[复制链接]
发表于 2020-2-19 09:27:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. m = list ( range ( 1 , 11 ) )
  2. for n in m :
  3.    m .remove ( n )
  4. print ( m )
复制代码
为什么输出为 [ 2,4,6,8,10 ] ,而不是  [ 1,3,5,7,9 ] ?
最佳答案
2020-2-19 09:43:22
dragov 发表于 2020-2-19 09:41
为什么隔着移除呢?
我认为第一次移除 1 , 第二次移除 2 ,第三次移除 3 ......

在循环里使用 remove 是一个陷阱。。

你想那样就这样:

  1. m = list(range(1, 11))
  2. for n in m[:]:
  3.     m.remove(n)
  4. print(m)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-19 09:28:11 | 显示全部楼层
第一次把 1 移除了,第二次把 3 移除了,……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-19 09:41:32 | 显示全部楼层
zltzlt 发表于 2020-2-19 09:28
第一次把 1 移除了,第二次把 3 移除了,……

为什么隔着移除呢?
我认为第一次移除 1 , 第二次移除 2 ,第三次移除 3 ......
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-19 09:43:22 | 显示全部楼层    本楼为最佳答案   
dragov 发表于 2020-2-19 09:41
为什么隔着移除呢?
我认为第一次移除 1 , 第二次移除 2 ,第三次移除 3 ......

在循环里使用 remove 是一个陷阱。。

你想那样就这样:

  1. m = list(range(1, 11))
  2. for n in m[:]:
  3.     m.remove(n)
  4. print(m)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-19 09:45:36 | 显示全部楼层
本帖最后由 txxcat 于 2020-2-19 10:16 编辑

每次循环后的m值:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ,n=m[0],删除1
[2, 3, 4, 5, 6, 7, 8, 9, 10],n=m[1],删除3
[2, 4, 5, 6, 7, 8, 9, 10],n=m[2],删除5
[2, 4, 6, 7, 8, 9, 10],n=m[3],删除7
[2, 4, 6, 8, 9, 10],n=m[4],删除9
[2, 4, 6, 8, 10]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-19 09:50:03 | 显示全部楼层
zltzlt 发表于 2020-2-19 09:43
在循环里使用 remove 是一个陷阱。。

你想那样就这样:

remove 是一个陷阱———— 我倒是听过这句话!
哦,原来是这个意思呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-19 09:51:11 | 显示全部楼层
因为第一次遍历的值是1,也就是你n=1,循环中移除的也就是n。最后输出的值才是[2,4,6,8,10]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-19 09:51:12 | 显示全部楼层
txxcat 发表于 2020-2-19 09:45
列表的序号是从0开始算的。
嗯,谢谢

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-19 09:59:28 | 显示全部楼层
AINIDEREN 发表于 2020-2-19 09:51
因为第一次遍历的值是1,也就是你n=1,循环中移除的也就是n。最后输出的值才是[2,4,6,8,10]

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-19 10:00:48 | 显示全部楼层
zltzlt 发表于 2020-2-19 09:43
在循环里使用 remove 是一个陷阱。。

你想那样就这样:

您好,要是想输出  [ 1,3,5,7,9 ]  ,程序代码应如何改写呢 ?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-19 10:01:38 | 显示全部楼层
dragov 发表于 2020-2-19 10:00
您好,要是想输出  [ 1,3,5,7,9 ]  ,程序代码应如何改写呢 ?
  1. m = list(range(10))
  2. for n in m:
  3.     m.remove(n)
  4. print(m)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-19 10:04:09 | 显示全部楼层
这个陷阱大概是这样:每次移除一个元素,列表都会缩短,然后下次循环移除的是缩短后的列表,不知道这样理解是不是正确的?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-19 10:04:18 | 显示全部楼层

你这个列表是 [ 0,1,2 ...... 9 ]
我的列表是 [ 1,2 ...... 9,10 ]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-19 10:05:54 | 显示全部楼层
dragov 发表于 2020-2-19 10:04
你这个列表是 [ 0,1,2 ...... 9 ]
我的列表是 [ 1,2 ...... 9,10 ]
  1. m = list(range(1, 11))
  2. for n in m[:]:
  3.     if not n % 2:
  4.         m.remove(n)
  5. print(m)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-19 10:06:09 | 显示全部楼层
Sungne_jer 发表于 2020-2-19 10:04
这个陷阱大概是这样:每次移除一个元素,列表都会缩短,然后下次循环移除的是缩短后的列表,不知道这样理解 ...

您说的还真是有点儿那个意思
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-19 10:08:52 | 显示全部楼层
哇,真能实现 ,厉害了 ,谢谢老师 !
我捉摸了半天,也没捉摸出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-19 10:25:39 | 显示全部楼层
n的取值是多少,怎么变的?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-19 10:30:29 | 显示全部楼层
huminxuan 发表于 2020-2-19 10:25
n的取值是多少,怎么变的?
n的取值是从1到10
第1次删除1
第2次删除3
第3次删除5
第4次删除7
第5次删除9
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-2 18:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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