码迷,mamicode.com
首页 > 编程语言 > 详细

Python循环删除中遇到的小坑

时间:2017-12-16 23:06:52      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:列表   分享   com   解决办法   自动   赋值   []   条件   .com   

这是我学python的时候印象最深的小坑

  • 需求有一个列表要删掉==‘b‘的这个字符

 1 In [1]: l = [‘a‘, ‘b‘, ‘b‘, ‘c‘, ‘b‘, ‘d‘, ‘b‘, ‘b‘]
 2 
 3 In [2]: l
 4 Out[2]: [‘a‘, ‘b‘, ‘b‘, ‘c‘, ‘b‘, ‘d‘, ‘b‘, ‘b‘]
 5 
 6 In [3]: for i in l:
 7    ...:     if i == ‘b‘:
 8    ...:         l.remove(i)
 9    ...:         
10 
11 In [4]: l
12 Out[4]: [‘a‘, ‘c‘, ‘d‘, ‘b‘, ‘b‘]

      然后我通过最常规的方法一个for循环去删除,但是结果还是没有把全部为‘b‘的元素给删除,这是为什么??

      其实这个问题很好理解,就是当你顺序删除第一符合条件的元素的时候,然后此时当前元素的位置就会空出,

后面的元素会填充那个被删除元素的坑位,从而逃过一劫。那么有什么解决办法了?

      既然知道问题所在,那我们就不顺序删除,从后面往前面删除,或者换个思路。

1,方法一:我们就用倒叙删除的方式

 1 In [15]: l = [‘a‘, ‘b‘, ‘b‘, ‘c‘, ‘b‘, ‘d‘, ‘b‘, ‘b‘]
 2     ...: 
 3 
 4 In [16]: for i in range(len(l)-1, -1, -1):
 5     ...:     if l[i] == ‘b‘:
 6     ...:         l.remove(l[i])
 7     ...:         
 8 
 9 In [17]: l
10 Out[17]: [‘a‘, ‘c‘, ‘d‘]

这样我们从后面往前面删除,元素就不会自动填坑,就避免了那个小坑了

 1 In [14]: list(range(len(l)-1, -1, -1))

2 Out[14]: [7, 6, 5, 4, 3, 2, 1, 0] 

这行代码是用来获取倒叙的下角标方便排序的

2,方法二:我们换个思路不用删除的方式,我们用添加的方式去删除.

 1 In [18]: l = [‘a‘, ‘b‘, ‘b‘, ‘c‘, ‘b‘, ‘d‘, ‘b‘, ‘b‘]
 2     ...: 
 3 
 4 In [19]: n = []
 5 
 6 In [20]: for i in l:
 7     ...:     if i != ‘b‘:
 8     ...:         n.append(i)
 9     ...:         
10 
11 In [21]: n
12 Out[21]: [‘a‘, ‘c‘, ‘d‘]

我们新建一个空列表,然后再把判断条件取反的都添加到新列表里面

这样就达到了删除==‘b‘元素的目的,写到这可能就有人会说你这明明是新变量

1 In [22]: l = n
2 
3 In [23]: l
4 Out[23]: [‘a‘, ‘c‘, ‘d‘]

很简单,重新给 l 赋值呗。

 

 

这是我写的第一条博客:路漫漫其修远兮 吾将上下而求索

我的github主页   https://github.com/wgPython

欢迎各位大佬技术交流,分享.

Python循环删除中遇到的小坑

标签:列表   分享   com   解决办法   自动   赋值   []   条件   .com   

原文地址:http://www.cnblogs.com/wgPython/p/8047900.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!