Files
wpylib/generators.py
2010-02-19 18:41:28 +00:00

44 lines
722 B
Python

# -*- python -*-
#
# $Id: generators.py,v 1.1 2010-02-19 18:41:28 wirawan Exp $
#
# Created: 20100218
# Wirawan Purwanto
#
"""
Various generators
"""
def all_combinations(seq):
"""Generates stream of tuples containing all possible
combinations of items (where order matters).
This is useful e.g. for generating all possible indices for a multidimensional
array.
Example:
>>> for i in all_combinations((xrange(4), xrange(3))): print i
(0, 0)
(1, 0)
(2, 0)
(3, 0)
(0, 1)
(1, 1)
(2, 1)
(3, 1)
(0, 2)
(1, 2)
(2, 2)
(3, 2)
"""
if len(seq) <= 1:
for i in seq[0]:
yield (i,)
else:
for s1 in all_combinations(seq[1:]):
for s0 in seq[0]:
yield (s0,) + s1