Python删除列表中相同的元素

如何完美删除a,b列表中相同的元素

不多哔哔,见代码

对深度拷贝的对象进行修改并不会改变原来的对象

如果是浅拷贝(copy)则会同时修改原对象的值

list.remove()会移除第一个匹配到的值

import copy
def array_diff(a, b):
    #注意这里需要深度拷贝,如果遍历和移除都在同一个列表上进行的话会报错
    aa = copy.deepcopy(a)
    # b中有相同的数字的时候,在后面remove时报错,cus第一次已经remove光了
    for i in b:
        for t in range(len(aa)):
            if aa[t] == i:
             # 我们加一层判断,这样就不会出现list.remove(x): x not in list的错误了
                if aa[t] in a:
                    a.remove(aa[t])
    return a

上面的代码适合理解方法的思维,但是Python怎么能够用这么长的代码去实现这么简单的一个功能呢?于是究极简洁的写法出现了:

def array_diff(a, b):
    return [x for x in a if x not in b]

直接两行代码解决需求。

上面用到了列表推导式:

variable = [out_exp_res for out_exp in input_list if out_exp == 2]
  out_exp_res:  列表生成元素表达式,可以是有返回值的函数。
  for out_exp in input_list:  迭代input_list将out_exp传入out_exp_res表达式中。
  if out_exp == 2:  根据条件过滤哪些值可以。

一个简单至极的例子:

def squared(x):
    return x*x
multiples = [squared(i) for i in range(30) if i % 3 is 0]
print (multiples)
#  Output: [0, 9, 36, 81, 144, 225, 324, 441, 576, 729]
Donate here!