python 剔除列表中的所有的某一元素

场景:我想剔除列表中所有的空元素

我尝试过 for index in rang(0, len(mylist))  + mylist.pop/remove ;或者是 for item in mylist + mylist.pop/remove, 都会因为失去元素导致数组越界问题,即便是使pop或者remove完了使index-=1,仍然会越界 或者删不干净。

方法如下,见代码:

mylist = []
copy_mylist = mylist
for item in copy_mylist:
    if item == "":
        mylist.remove(item)

方法二:

方法二同样适用于剔除列表中的相同元素,且保持原有序列。

my_list = [1, 2, 3, "", 5, "", 7, "", 10]
tmp_list = []
[tmp_list.append(item) for item in my_list if item]
my_list = tmp_list
print(my_list)

执行结果:

[1, 2, 3, 5, 7, 10]

再说说去重,本质上跟文章主题是一样的。也是剔除一些元素。

my_list = [1, 2, 3, 3, 5, 7, 7, 7, 10]
tmp_list = []
[tmp_list.append(item) for item in my_list if item not in tmp_list]
my_list = tmp_list
print(my_list)

执行结果:

[1, 2, 3, 5, 7, 10]

 

看了代码还不明白为何的同学,回去补列表推导相关内容。(以后会有一篇专门的文章讲各种推导式,跟大家一起学习)

0 0 投票数
文章评分
订阅评论
提醒
guest
2 评论
内联反馈
查看所有评论
allenfrostline

你好ZKeeer,我看了你的代码,有如下几点建议,望斧正:

1. 数组越界其实不是问题,只要倒序pop即可;
2. 去重时我觉得用list的in()不妥,他是O(n)的复杂度,也就是说去重你用了O(n2)但内置的set()其实也就O(n),因为用了hash table。