Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here is a solution using dictionaries I just whipped up:</p> <pre><code>def iter_recursive_common_elements(lists, max_depth=None): data = [{k:set(v) for k,v in lists.iteritems()}] # guarantee unique depth = 0 def get_common_elements(lists, base): d = {} for k, v in lists.iteritems(): merged = k.split(':') potential = set(base).difference(merged) for target in potential: d[':'.join(sorted(merged+[target]))] = v.intersection(base[target]) return d if d else None while True: ret = get_common_elements(data[depth], data[0]) if not ret: break data.append(ret) depth += 1 yield data[depth] if max_depth and depth &gt; max_depth: break </code></pre> <hr> <p>Using it is simple enough:</p> <pre><code>lists = {'a':[1,2,3,4,5], 'b':[6,7,8,9,10], 'c':[1,3,5,7,9], 'd':[2,4,6,8,10], 'e':[4,5,6,7,8]} for x in iter_recursive_common_elements(lists): print x &gt;&gt;&gt; {'d:e': set([8, 4, 6]), 'a:b': set([]), 'a:c': set([1, 3, 5]), 'a:d': set([2, 4]), 'a:e': set([4, 5]), 'b:e': set([8, 6, 7]), 'b:d': set([8, 10, 6]), 'b:c': set([9, 7]), 'c:d': set([]), 'c:e': set([5, 7])} {'a:b:d': set([]), 'a:b:e': set([]), 'a:b:c': set([]), 'a:c:e': set([5]), 'c:d:e': set([]), 'a:c:d': set([]), 'b:c:d': set([]), 'b:c:e': set([7]), 'b:d:e': set([8, 6]), 'a:d:e': set([4])} {'b:c:d:e': set([]), 'a:b:c:e': set([]), 'a:b:c:d': set([]), 'a:c:d:e': set([]), 'a:b:d:e': set([])} {'a:b:c:d:e': set([])} </code></pre> <hr> <p>Can also clean up the output to match more what you wanted:</p> <pre><code>for x in iter_recursive_common_elements(lists): for k, v in sorted(x.items()): if v: print '(%s) : %s' % (k.replace(':', ', '), list(v)) &gt;&gt;&gt; (a, c) : [1, 3, 5] (a, d) : [2, 4] (a, e) : [4, 5] (b, c) : [9, 7] (b, d) : [8, 10, 6] (b, e) : [8, 6, 7] (c, e) : [5, 7] (d, e) : [8, 4, 6] (a, c, e) : [5] (a, d, e) : [4] (b, c, e) : [7] (b, d, e) : [8, 6] </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload