Yes, that works quite well. Thanks Chris!
On Tue, Oct 30, 2012 at 4:27 PM, Chris Smith <[email protected]> wrote: > What is said works, I believe...see the docstring > > def kbin(l, k, ordered=True): > """ > Return sequence ``l`` partitioned into ``k`` bins. > If ordered is True then the order of the items in the > flattened partition will be the same as the order of the > items in ``l``; if False, all permutations of the items will > be given; if None, only unique permutations for a given > partition will be given. > > Examples > ======== > > >>> from sympy.utilities.iterables import kbin > >>> for p in kbin(range(3), 2): > ... print p > ... > [[0], [1, 2]] > [[0, 1], [2]] > >>> for p in kbin(range(3), 2, ordered=False): > ... print p > ... > [(0,), (1, 2)] > [(0,), (2, 1)] > [(1,), (0, 2)] > [(1,), (2, 0)] > [(2,), (0, 1)] > [(2,), (1, 0)] > [(0, 1), (2,)] > [(0, 2), (1,)] > [(1, 0), (2,)] > [(1, 2), (0,)] > [(2, 0), (1,)] > [(2, 1), (0,)] > >>> for p in kbin(range(3), 2, ordered=None): > ... print p > ... > [[0], [1, 2]] > [[1], [2, 0]] > [[2], [0, 1]] > [[0, 1], [2]] > [[1, 2], [0]] > [[2, 0], [1]] > > """ > from sympy.utilities.iterables import partitions, permutations > def rotations(seq): > for i in range(len(seq)): > yield seq > seq.append(seq.pop(0)) > if ordered is None: > func = rotations > else: > func = permutations > for p in partitions(len(l), k): > if sum(p.values()) != k: > continue > for pe in permutations(p.keys()): > rv = [] > i = 0 > for part in pe: > for do in range(p[part]): > j = i + part > rv.append(l[i: j]) > i = j > if ordered: > yield rv > else: > template = [len(i) for i in rv] > for pp in func(l): > rvp = [] > ii = 0 > for t in template: > jj = ii + t > rvp.append(pp[ii: jj]) > ii = jj > yield rvp > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/sympy?hl=en. > > -- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.
