如何从列表中删除元素列表?

2024-03-28 12:04:29 发布

您现在位置:Python中文网/ 问答频道 /正文

假设有列表AB

A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
B = [2, 4, 6]

我想修改A,使其成为

A = [1, 3, 5, 7, 8, 9, 10]

我不想使用remove,因为A可以有10k个数字


Tags: 列表数字remove
2条回答

如果您的用例允许;您可以使用超高效的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的相同顺序,并将从中删除所有重复项

一种比较慢比较快的方法是使用列表理解,这种方法在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

使用列表理解:

A = [x for x in A if x not in B]

相关问题 更多 >