python全数字问题_在Python中使用for循环不能完全删除具有相同连续数字的列表。这个问题是自己造成的,无法,带有,由,自身...

使用关键字for遍历列表元素并且删除列表中指定重复数字,但是出现了我不明白的结果,下面是我运行的代码:

>>>a=[1,1,1,1,1,1]

>>>for i in a:

if i ==1:

a.remove(i)

>>>a

>>>[1,1,1]

我首先创建了一个列表a,然后使用Python中的for遍历一遍列表,如果i值等于1,那么就删除1,我本以为这样操作之后列表a会成为空列表,结果出乎我意料。。。

然后我用while重新试了以下:

>>> a=[1,1,1,1,1,1]

>>> while 1 in a:

a.remove(1)

>>> a

[]

这下全删除干净了。。。

再试试

>>> a=[1,1,1,1,1,1,1,1,1,1,1,1,1,1]

>>> for i in a:

if i ==1:

a.remove(i)

print(a)

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

[1, 1, 1, 1, 1, 1, 1, 1, 1]

[1, 1, 1, 1, 1, 1, 1, 1]

[1, 1, 1, 1, 1, 1, 1]

>>> a

[1, 1, 1, 1, 1, 1, 1]

邪乎了,前面的1是1,后面的1就不是1了?到底哪里出问题了呀。。。

接着写:

>>> a=[1,1,1,2,3,4,5,3,1,]

>>> a

[1, 1, 1, 2, 3, 4, 5, 3, 1]

>>> for i in a:

print(i)

1

1

1

2

3

4

5

3

1

>>> for i in a:

if i is 1:

a.remove(1)

>>> a

[2, 3, 4, 5, 3, 1]

>>> a=[1,1,1,1,2,3,4,5,3,1,]

>>> for i in a:

if i is 1:

a.remove(1)

>>> a

[1, 2, 3, 4, 5, 3, 1]

>>> a=[1,1,1,1,1,2,3,4,5,3,1,]

>>> for i in a:

if i is 1:

a.remove(1)

>>> a

[1, 2, 3, 4, 5, 3, 1]

邪乎了,最开始的a列表中的三个1被删除了,然后我又加入往列表a中多加了一个1,总共四个1,操作一遍后删除了3个1,我以为这个代码只会删除3个1,结果我最后再加了一个1,这下好了,5个1删除了4,与上面的4个1得到的结果一样。我要崩溃了。。。

为了一探究竟,我搞了下面的代码:

>>> a=[1,1,1,1,2,3,4,5,3,1,]

>>> for i in a:

print(i)

if i is 1:

print(i,'is 1')

else:

print(i,'is not 1')

1

1 is 1

1

1 is 1

1

1 is 1

1

1 is 1

2

2 is not 1

3

3 is not 1

4

4 is not 1

5

5 is not 1

3

3 is not 1

1

1 is 1

从上面的代码运行情况来看,for循环中的确遍历了整个列表a,可是为嘛就是不执行a.remove(1)这句代码呢?

哦噢,可能是remove这个函数出了问题,我给大家看下改进的代码:

>>> a=[1,1,1,1,2,3,4,5,3,1,]

>>> for i in a:

print(i)

if i is 1:

print(i,'is 1')

a.remove(1)

print(a)

else:

print(i,'is not 1')

print(a)

1

1 is 1

[1, 1, 1, 2, 3, 4, 5, 3, 1]

1

1 is 1

[1, 1, 2, 3, 4, 5, 3, 1]

2

2 is not 1

[1, 1, 2, 3, 4, 5, 3, 1]

3

3 is not 1

[1, 1, 2, 3, 4, 5, 3, 1]

4

4 is not 1

[1, 1, 2, 3, 4, 5, 3, 1]

5

5 is not 1

[1, 1, 2, 3, 4, 5, 3, 1]

3

3 is not 1

[1, 1, 2, 3, 4, 5, 3, 1]

1

1 is 1

[1, 2, 3, 4, 5, 3, 1]

这下各位看官看懂了吗??这下我只看见出现了两个1,没有出现四个1,两个1被删除了,所以遍历不到了。

所以问题的真相只有一个,赋值给变量i的过程出现了问题。。。

各位看官看懂了?

在最后一个我给的代码中可以看出,for循环遍历过程中i在第三次循环中是赋值了2,并没有赋值1,

所以for循环中i的赋值是与当前列表密切相关的,当前是第三次循环,那么就应该是将当前列表第三个数字赋值给i,此时a列表为[1,1,2,3,4,5,3,1],列表a[2]为2,所以赋值为2

,这下我们就知道了漏掉了前面的两个1,而最后的一个1被发现,然后就删除了最前面的一个1,得到[1,2,3,4,5,3,1],解答完毕!

综上,在这里做出一个大胆的直言,对于连续出现1的列表for循环是完成不了完全删除操作的,这与for循环的机制直接有关

那么知道了产生问题的原因,现在还可以使用for来完成这个任务吗?各位大佬有什么好的解决方法吗?

哈哈-- 我解决这个问题,直接用两次循环不就好了!上代码

>>> a=[1, 1, 1, 2, 3, 4, 5, 3, 1, 1]

>>> for i in a:

if i is 1:

a.remove(1)

>>>

>>> a

[2, 3, 4, 5, 3, 1, 1]

>>> a=[1, 1, 1, 2, 3, 4, 5, 3, 1, 1]

>>> for i in a:

print(a)

if i ==1:

a.remove(1)

for x in a:

if x==1:

a.remove(1)

[1, 1, 1, 2, 3, 4, 5, 3, 1, 1]

[2, 3, 4, 5, 3, 1, 1]

[2, 3, 4, 5, 3, 1]

[2, 3, 4, 5, 3]

[2, 3, 4, 5, 3]

问题解决,bingo

>>> a=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,]

>>> for i in a:

print(a)

if i ==1:

a.remove(1)

for x in a:

if x==1:

a.remove(1)

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

[1, 1, 1, 1, 1, 1]

瞬间打脸。。。上面的代码除掉的1是有限的。算了算了,用for来删除还不如用while,正如python大师说的直接用最简单的方法就好,整那么复杂干嘛。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值