# generate all combinations of a list (with variable output length)

Bengt Richter bokr at oz.net
Sat Jun 29 00:46:42 CEST 2002

```On Fri, 28 Jun 2002 15:09:47 -0500, "Mark McEahern" <marklists at mceahern.com> wrote:

>> i'm looking for a way to generate all possible combinations of all items
>> in a list. list = ["A","D","\$","5","R"]
>
>i don't have a solution, but some questions to clarify:
>
>if you think of your list as comprising the digits, then you're asking for
>an n-length string composed of all possible digits where the digits include:
>
>  A, D, \$, 5, R, and None (the representation of the latter is '')
>
>so, for n = 10, this is a possible value:
>
>  AAAAAAAAAA
>
>as well as:
>
>  [          ]
>
>omit the brackets.
>
>True?
>
>anyway, this might get you started:
>
>  http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/105962
>
>// m
>
Or, implementing your base-5 digits idea, and leaving out '':

...     out = []; m = n
...     while 1:
...         n,d = divmod(n,5)
...         out.append(codes[d])
...         if not n:break
...     out.reverse()
...     return '%d:%s' % (m,''.join(out))
...
>>> [adD5r(5**n) for n in range(5)]
['1:D', '5:DA', '25:DAA', '125:DAAA', '625:DAAAA']
>>> [adD5r(5**n+1) for n in range(5)]
>>> [adD5r(n) for n in range(26)]
['0:A', '1:D', '2:\$', '3:5', '4:R', '5:DA', '6:DD', '7:D\$', '8:D5', '9:DR', '10:\$A', '11:\$
D', '12:\$\$', '13:\$5', '14:\$R', '15:5A', '16:5D', '17:5\$', '18:55', '19:5R', '20:RA', '21:R
D', '22:R\$', '23:R5', '24:RR', '25:DAA']

The smallest and biggest 10-"digit" numbers would be
'0:A'
(I'll leave it as an exercise for the OP to prefix leading "zeroes" to desired print width
for that set of strings ;-)