在元素过多的列表中快速删除- PYTHON

6rqinv9w  于 2022-12-25  发布在  Python
关注(0)|答案(2)|浏览(153)

如何快速地从a中删除B中的元素?

import itertools

a=list(itertools.product("12X",repeat=15))
b=list(itertools.product("1X",repeat=15))
print("a len = ",len(a))
print("b len = ",len(b))

for x in b:
    if x in a:
        a.remove(x)

它非常慢。

t30tvxxf

t30tvxxf1#

把列表转换成集合,然后做减法。

import itertools

a=list(itertools.product("123",repeat=3))
b=list(itertools.product("12",repeat=3))
print("a len = ",len(a))
print("b len = ",len(b))
c = set(a) - set(b)
print(len(c))

# This is the equivalent of
c = set(a).difference(set(b))

>>> a len =  27
>>> b len =  8
>>> 19

您也可以执行set(a).intersection(set(b)),以便返回同时出现在两个列表中的对象。
如果顺序很重要,就使用列表解析:

excluded_elems = set(b)
c = [x for x in a if x not in excluded_elems]
print(len(c))

确保在解析之外计算set(b)一次,而不是在not in检查中内联它,这样会在每次迭代时计算它。

g0czyy6m

g0czyy6m2#

您可以尝试以下操作:

c = set(b)
a = [ x for x in a if x in c]

相关问题