为这个列表推导式什么无法去重?

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

我相信你能看出问题所在。