0

如何形成由不在 a 中的 b 元素组成的数组 (c)?

a=[1,2,"ID123","ID126","ID124","ID125"]
b=[1,"ID123","ID124","ID125","343434","fffgfgf"]
c= []

这可以在不使用列表理解的情况下完成吗?

4

3 回答 3

6

如果列表很长,你想先做一组a

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

如果元素的顺序无关紧要,那么只需使用集合:

c = list(set(b) - set(a))

-Python 列表不像 Ruby 数组那样提供直接运算符。

于 2012-06-12T17:54:04.150 回答
1

使用列表推导是最直接的:

[i for i in b if i not in a]
c
['343434', 'fffgfgf']

但是,如果您真的不想使用列表推导,您可以使用生成器表达式

c = (i for i in b if i not in a)

这也不会在内存中一次生成所有结果列表(以防万一)。

于 2012-06-12T17:52:42.620 回答
0

以下将做到这一点:

c = [v for v in b if v not in a]

如果a很长,将其变成一个集合可能会提高性能:

a_set = set(a)
c = [v for v in b if v not in a_set]
于 2012-06-12T17:55:15.553 回答