You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
722 B
44 lines
722 B
15 years ago
|
# -*- 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
|
||
|
|