Python and Combinatorics
Peter Otten
__peter__ at web.de
Tue May 16 04:33:14 EDT 2006
Nic wrote:
>> PS: Please don't top-post.
You probably overlooked that :-)
Here's a naive implementation:
from itertools import izip
def unique(items, N):
assert N > 0
if N == 1:
for item in items:
yield item,
else:
for index, item in enumerate(items):
for rest in unique(items[index+1:], N-1):
yield (item,) + rest
def repeat(*items):
assert len(items)
if len(items) == 1:
for item in items[0]:
yield item,
else:
for item in items[0]:
for rest in repeat(*items[1:]):
yield (item,) + rest
def render():
pairs = list(unique(range(1, 4), 2))
for item in unique(pairs, 3):
for suffix in repeat(*["ab"]*3):
yield tuple((a, b, s) for (a, b), s in izip(item, suffix))
if __name__ == "__main__":
for item in render():
print " ".join("%s%s%s" % t for t in item)
Peter
More information about the Python-list
mailing list