In [6]: print load_struct() [['l1e1'], ['l2e1', 'l2e2', 'l2e3', 'l2e4'], ['l3e1', 'l3e2', 'l3e3', 'l3e4']] In [7]: for x in traverse(load_struct()): print x ...: ('l1e1', ('l2e1', 'l2e2')) ('l1e1', ('l2e1', 'l2e3')) ('l1e1', ('l2e1', 'l2e4')) ('l1e1', ('l2e2', 'l2e3')) ('l1e1', ('l2e2', 'l2e4')) ('l1e1', ('l2e3', 'l2e4')) ('l1e1', 'l2e1', ('l3e1', 'l3e2')) ('l1e1', 'l2e1', ('l3e1', 'l3e3')) ('l1e1', 'l2e1', ('l3e1', 'l3e4')) ('l1e1', 'l2e1', ('l3e2', 'l3e3')) ('l1e1', 'l2e1', ('l3e2', 'l3e4')) ('l1e1', 'l2e1', ('l3e3', 'l3e4')) ('l1e1', 'l2e2', ('l3e1', 'l3e2')) ('l1e1', 'l2e2', ('l3e1', 'l3e3')) ('l1e1', 'l2e2', ('l3e1', 'l3e4')) ('l1e1', 'l2e2', ('l3e2', 'l3e3')) ('l1e1', 'l2e2', ('l3e2', 'l3e4')) ('l1e1', 'l2e2', ('l3e3', 'l3e4')) ('l1e1', 'l2e3', ('l3e1', 'l3e2')) ('l1e1', 'l2e3', ('l3e1', 'l3e3')) ('l1e1', 'l2e3', ('l3e1', 'l3e4')) ('l1e1', 'l2e3', ('l3e2', 'l3e3')) ('l1e1', 'l2e3', ('l3e2', 'l3e4')) ('l1e1', 'l2e3', ('l3e3', 'l3e4')) ('l1e1', 'l2e4', ('l3e1', 'l3e2')) ('l1e1', 'l2e4', ('l3e1', 'l3e3')) ('l1e1', 'l2e4', ('l3e1', 'l3e4')) ('l1e1', 'l2e4', ('l3e2', 'l3e3')) ('l1e1', 'l2e4', ('l3e2', 'l3e4')) ('l1e1', 'l2e4', ('l3e3', 'l3e4'))