[prev in list] [next in list] [prev in thread] [next in thread]
List: python-list
Subject: Re: counting using variable length string as base
From: rootkill <lcordier () gmail ! com>
Date: 2008-04-01 9:15:48
Message-ID: f7cdd113-97c0-425f-8ede-9563e4b89907 () a70g2000hsh ! googlegroups ! com
[Download RAW message or body]
On Mar 27, 8:15 am, Grimsqueaker <Grimsqueake...@gmail.com> wrote:
> Hi, I'm fairly new to Python and to this list. I have a problem that
> is driving me insane, sorry if it seems simple to everyone, I've been
> fighting with it for a while. :))
>
> I want to take a variable length string and use it as a base for
> counting, eg. given the string 'abc' the sequence would be:
>
> a
> b
> c
> aa
> ba
> ca
> ab
> bb
> cb
> ...
> ccc
>
> Basically I want to find every possible order of every combination.
> Its easy if you know how many characters there will be in your string
> (use nested for loops), but I am stuck with the variable length
> string. I think I have to use a generator but I'm not sure exactly
> how.
>
> Can anyone give me a pointer in the right direction?
>
> Thanks
> Daniel Browne
Since you didn't ask for the smallest solution I'll opt for the
clearest one ;)
I'll use the very usefull baseconvert,
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/111286
def baseconvert(number, fromdigits, todigits):
if str(number)[0] == '-':
number = str(number)[1:]
neg = 1
else:
neg = 0
# make an integer out of the number
x = long(0)
for digit in str(number):
x = x * len(fromdigits) + fromdigits.index(digit)
# create the result in base 'len(todigits)'
res = ''
if x == 0:
res = todigits[0]
while x > 0:
digit = x % len(todigits)
res = todigits[digit] + res
x /= len(todigits)
if neg:
res = '-' + res
return res
BASE10 = '0123456789'
s = 'abcdef'
n = len(s)
for i in xrange(n**n):
print baseconvert(str(i), BASE10, s)
You can also convert back, baseconvert('abaa', s, BASE10).
Hope it helps.
Regards, Louis.
--
http://mail.python.org/mailman/listinfo/python-list
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic