from __future__ import generators
-def xcombinations(items, n):
- """Iterate through ordered, length `n` subsets of `items`.
-
- >>> for c in xcombinations([1, 2, 3], 2):
- ... print c
- [1, 2]
- [1, 3]
- [2, 1]
- [2, 3]
- [3, 1]
- [3, 2]
- """
- if n==0: yield []
- else:
- for i in xrange(len(items)):
- for cc in xcombinations(items[:i]+items[i+1:],n-1):
- yield [items[i]]+cc
-
def xunique_combinations(items, n):
"""Iterate through unordered, length `n` subsets of `items`.
for i in xrange(len(items)):
for cc in xunique_combinations(items[i+1:],n-1):
yield [items[i]]+cc
-
-def xselections(items, n):
- """Iterate through all length `n` multisets of `items`.
-
- >>> for c in xselections([1, 2, 3], 2):
- ... print c
- [1, 1]
- [1, 2]
- [1, 3]
- [2, 1]
- [2, 2]
- [2, 3]
- [3, 1]
- [3, 2]
- [3, 3]
- """
- if n==0: yield []
- else:
- for i in xrange(len(items)):
- for ss in xselections(items, n-1):
- yield [items[i]]+ss
-
-def xpermutations(items):
- """Iterate through all permutations of `items`.
-
- >>> for c in xpermutations([1, 2, 3]):
- ... print c
- [1, 2, 3]
- [1, 3, 2]
- [2, 1, 3]
- [2, 3, 1]
- [3, 1, 2]
- [3, 2, 1]
- """
- return xcombinations(items, len(items))
-