Velocity Reviews > Re: Combinations of lists

# Re: Combinations of lists

Oscar Benjamin
Guest
Posts: n/a

 10-03-2012
Oscar wrote:
>>> def uniquecombinations(h, m):
>>> for ha in submultisets(h, len(h)//2):
>>> hb = list(h)
>>> for c in ha:
>>> hb.remove(c)
>>> yield [m[0] + a for a in ha] + [m[1] + b for b in hb]
>>>
>>> h = ['A', 'A', 'B', 'B']
>>> m = ['a', 'b']
>>>
>>> for x in uniquecombinations(h, m):
>>> print(x)
>>> '''
>>>
>>> Output:
>>> ['aB', 'aB', 'bA', 'bA']
>>> ['aA', 'aB', 'bA', 'bB']
>>> ['aA', 'aA', 'bB', 'bB']

On 3 October 2012 21:15, Steen Lysgaard <(E-Mail Removed)> wrote:
> Hi,
>
> thanks for your interest. Sorry for not being completely clear, yes
> the length of m will always be half of the length of h.
>
> /Steen

Then you can make the uniquecombinations function recursive. First
find the elements that go with 'a' then from the remaining elements
find those that go with 'b', then 'c' and so on.

Oscar

88888 Dihedral
Guest
Posts: n/a

 10-03-2012
Oscar Benjamin於 2012年10月4日星期四UTC+8上午4時29分51秒 寫道：
> Oscar wrote:
>
> >>> def uniquecombinations(h, m):

>
> >>> for ha in submultisets(h, len(h)//2):

>
> >>> hb = list(h)

>
> >>> for c in ha:

>
> >>> hb.remove(c)

>
> >>> yield [m[0] + a for a in ha] + [m[1] + b for b in hb]

>
> >>>

>
> >>> h = ['A', 'A', 'B', 'B']

>
> >>> m = ['a', 'b']

>
> >>>

>
> >>> for x in uniquecombinations(h, m):

>
> >>> print(x)

>
> >>> '''

>
> >>>

>
> >>> Output:

>
> >>> ['aB', 'aB', 'bA', 'bA']

>
> >>> ['aA', 'aB', 'bA', 'bB']

>
> >>> ['aA', 'aA', 'bB', 'bB']

>
>
>
> On 3 October 2012 21:15, Steen Lysgaard <(E-Mail Removed)> wrote:
>
> > Hi,

>
> >

>
> > thanks for your interest. Sorry for not being completely clear, yes

>
> > the length of m will always be half of the length of h.

>
> >

>
> > /Steen

>
>
>
> Then you can make the uniquecombinations function recursive. First
>
> find the elements that go with 'a' then from the remaining elements
>
> find those that go with 'b', then 'c' and so on.
>
>
>
> Oscar

Lets simplify the problem as follows:

A set of m symbols [0, 1,2,3...m-1] and each symbol can occur
a pecified number of times [(0, k(0)), (1, k(1)), ....(m-1, k(m-1)].rom a list to form a list of (i, k(i)) where k(i) are all positive integers.

For example [ (0,3), (1,2), (2, 1), (3, 2)], this is easy to generate
valid numbers in base m numbers of sum(k(i)) digits.

in the final string.

88888 Dihedral
Guest
Posts: n/a

 10-03-2012
Oscar Benjamin於 2012年10月4日星期四UTC+8上午4時29分51秒 寫道：
> Oscar wrote:
>
> >>> def uniquecombinations(h, m):

>
> >>> for ha in submultisets(h, len(h)//2):

>
> >>> hb = list(h)

>
> >>> for c in ha:

>
> >>> hb.remove(c)

>
> >>> yield [m[0] + a for a in ha] + [m[1] + b for b in hb]

>
> >>>

>
> >>> h = ['A', 'A', 'B', 'B']

>
> >>> m = ['a', 'b']

>
> >>>

>
> >>> for x in uniquecombinations(h, m):

>
> >>> print(x)

>
> >>> '''

>
> >>>

>
> >>> Output:

>
> >>> ['aB', 'aB', 'bA', 'bA']

>
> >>> ['aA', 'aB', 'bA', 'bB']

>
> >>> ['aA', 'aA', 'bB', 'bB']

>
>
>
> On 3 October 2012 21:15, Steen Lysgaard <(E-Mail Removed)> wrote:
>
> > Hi,

>
> >

>
> > thanks for your interest. Sorry for not being completely clear, yes

>
> > the length of m will always be half of the length of h.

>
> >

>
> > /Steen

>
>
>
> Then you can make the uniquecombinations function recursive. First
>
> find the elements that go with 'a' then from the remaining elements
>
> find those that go with 'b', then 'c' and so on.
>
>
>
> Oscar

Lets simplify the problem as follows:

A set of m symbols [0, 1,2,3...m-1] and each symbol can occur
a pecified number of times [(0, k(0)), (1, k(1)), ....(m-1, k(m-1)].rom a list to form a list of (i, k(i)) where k(i) are all positive integers.

For example [ (0,3), (1,2), (2, 1), (3, 2)], this is easy to generate
valid numbers in base m numbers of sum(k(i)) digits.

in the final string.