>>> 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
如果您的用例允许;您可以使用超高效的
set
操作:请注意,这将不会保持
A
的相同顺序,并将从中删除所有重复项一种比较慢比较快的方法是使用列表理解,这种方法在
A
中保留重复项并保持其顺序。但是,首先将B
转换为set
以使in
操作尽可能快,这一点至关重要:编辑:使用
set
查找的列表理解实际上是一个令人惊讶的更快的解决方案:使用列表理解:
相关问题 更多 >
编程相关推荐