2012-06-12 51 views
0

我怎样才能形成一个数组(c)由不属于b的元素组成?Python找到重复的数组操作

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

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

+0

这是你在找什么:HTTP:/ /stackoverflow.com/questions/5640630/array-filter-in-python –

+0

可以做到没有列表理解 – Rajeev

+0

[这是否回答你的问题?](http://stackoverflow.com/questions/3697432/python-how-找到列表交集) –

回答

6

如果列表很长,你想第一一套a

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

如果元素的顺序并不重要,那么就使用集:

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

就像Ruby数组一样,Python列表不提供直接运算符-

+0

+1 – Levon

1

使用list comprehension最直截了当:

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

然而,如果你真的希望使用列表理解,你可以使用一个generator expression

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

这也将不要一次在内存中生成结果列表(如果这是一个问题)。

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]