我正在寻找另一种方法来查找列表中项目的交集而不压缩两个列表。
以下是适用的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将数据存储在内存中,并且我不希望考虑到我的数据集有多大。
我希望最终输出类似于不消耗内存的生成器。
有什么想法吗?
答案 0 :(得分:3)
您可以使用itertools.izip代替zip。 itertools.izip
创建迭代器而不是列表。
答案 1 :(得分:1)
你可以这样做
[set(x) & set(list2[i]) for i, x in enumerate(list1)]
或使用izip
中的itertools
代替zip