如果您的用例允许;您可以使用set 操作,非常高效:
>>> A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> B = [2, 4, 6]
>>> A = list(set(A) - set(B))
>>> A
[1, 3, 5, 7, 8, 9, 10]
请注意,这不会使A 保持相同的顺序,并且会从中删除所有重复项。
slower faster 方式,but 以及在A 中保留重复项并保持其顺序的方式是使用列表理解。但是,您首先将B 转换为set 以使in 操作尽可能快,这一点至关重要:
>>> A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> B = [2, 4, 6]
>>> set_b = set(B)
>>> A = [n for n in A if n not in set_b]
[1, 3, 5, 7, 8, 9, 10]
编辑:使用set 查找的列表理解实际上是更快的解决方案:
$ python3 -m timeit --number=1000 --setup='import random; A = random.sample(range(10 ** 6), 10 ** 5); B = random.sample(range(10 ** 6), 10 ** 4)' 'list(set(A) - set(B))'
1000 loops, best of 5: 18.7 msec per loop
$ python3 -m timeit --number=1000 --setup='import random; A = random.sample(range(10 ** 6), 10 ** 5); B = random.sample(range(10 ** 6), 10 ** 4)' 'set_b = set(B); [n for n in A if n not in set_b]'
1000 loops, best of 5: 11.8 msec per loop