在两个列表中查找每个属性的交集

时间:2014-04-12 12:53:52

标签: python list

我正在寻找另一种方法来查找列表中项目的交集而不压缩两个列表。

以下是适用的zip方法:

>>> list1= [('red', 'black'), ('orange', 'grapes'), ('cat', 'dog')]
>>> list2= [('blue', 'red'), ('orange', 'apple'), ('dog', 'mouse')]
>>> _zip=zip(list1,list2)
>>> [set(x[0])& set(x[1]) for x in _zip]
[set(['red']), set(['orange']), set(['dog'])]

有没有办法避免使用拉链?因为zip将数据存储在内存中,并且我不希望考虑到我的数据集有多大。

我希望最终输出类似于不消耗内存的生成器。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

您可以使用itertools.izip代替zip。 itertools.izip创建迭代器而不是列表。

答案 1 :(得分:1)

你可以这样做

[set(x) & set(list2[i]) for i, x in enumerate(list1)]

或使用izip中的itertools代替zip