2013-07-25 50 views
-1

所以给那么集{'a', 'b', 'c'},{'c', 'd'},{'d','e','f'}。我想得到像列表[{'a', 'b', 'c'}, {'d'}, {'e','f'}]。我的第一个猜测是,这会适合递归。 set 1,set2 - set1,set3 - (set1 & set2)。我认为我对递归函数的经验更多地沿着向另一个方向移动的因子例子。预先感谢您的帮助。我想创建一个Python集合交集的列表

+0

您能详细说明输出的内容吗?这个问题的起源是什么?这三个集合的交集是空集{}。 –

+1

@TomRose在问题'['','b','c'},{'d'},{'e','f'}]' – woozyking

+0

@agf这是一个很好的问题,但他没有:“包括尝试的解决方案,为什么他们不工作。”他只需要编辑它。 –

回答

3

可以用递归来做到这一点,但不是必要的。这很容易做到迭代:

>>> sets = {'a', 'b', 'c'}, {'c', 'd'}, {'d','e','f'} 
>>> unique = [] 
>>> seen = set() 
>>> for s in sets: 
... unique.append(s - seen) 
... seen |= s 
... 
>>> seen 
set(['a', 'c', 'b', 'e', 'd', 'f']) 
>>> unique 
[set(['a', 'c', 'b']), set(['d']), set(['e', 'f'])] 
+0

解释''='巫术plz – Stephan

+2

@Stephan http://docs.python.org/2/library/stdtypes.html#set.update – agf

0

我喜欢python,因为它的列表和设置解析。我认为这个问题突出了这个功能的便利性。

seta = {'a', 'b', 'c'} 
setb = {'c', 'd'} 
setc = {'d','e','f'} 

list_of_sets = [seta, {b for b in setb: if b not in seta}, {c for c in setc: if c not in seta}] 
+0

这不会扩大到更多的集合,这是他在想什么时候他谈到了递归。 – agf