def remove_repeat(num_list):
tmp_list = []
tmp_list = [i for i in num_list if i not in tmp_list]
return tmp_list
if __name__ == '__main__':
num_list = [1,1,2,4,4,1,3,4,3,3,6,5,5,6,2]
# print(remove_repeat_simple1(num_list))
# print(remove_repeat_simple2(num_list))
print(remove_repeat(num_list))
可能原因是这种推导方式 tmp_list 里面始终是按初始[] 的来处理的。
换种方式的话,就可以了:
def remove_repeat(num_list):
tmp_list = []
for i in num_list:
if i not in tmp_list:
tmp_list.append(i)
return tmp_list
def remove_repeat(num_list):
tmp_list = []
# 列表推导式,返回列表,为了让你看清效果,新增变量 rst_list 用来存放列表推导式的结果
rst_list = []
for i in num_list:
if i not in tmp_list:# tmp_list为空列表,因此num_list里的所有元素,均可以通过条件判断
rst_list.append(i)
# 会在推导式执行完成后,一次性将结果写入tmp_list变量,而不是执行推导式的过程中就直接写入tmp_list变量
tmp_list = rst_list
# tmp_list = [i for i in num_list if i not in tmp_list]
return tmp_list
A. 我先把你的列表推导式,给你还原一下,就很容易明白为啥不能完成去重了把?
B. 前面两位老哥的去重方式,是正确的,不过用set方式去重列表的话,可能会导致列表元素的排列位置发生变化,根据具体需求选择去重方式
因为在列表推导式的整个执行过程中,tmp_list
的值永远是先前定义的空列表,只有执行完才会被重新复制。
一直说的一句话:**不要在循环中更改列表!**
因为你写的程序等价于这个函数
def remove_repeat(num_list):
tmp_list = []
tmp_list2 = [i for i in num_list if i not in tmp_list]
tmp_list = tmp_list2
return tmp_list
我相信你能看出问题所在。