Loop from 'aaaa' to 'tttt' ?
Andrew Walkingshaw
andrew-usenet at lexical.org.uk
Mon Jun 16 19:36:59 CEST 2003
In article <3EEDFD89.CD2677D8 at engcorp.com>, Peter Hansen wrote:
>
>>>> set = 'acgt'
>>>> sets = [''.join(a,b,c,d) for a in set for b in set for c in set for d in set]
>>>> sets
> ['aaaa', 'aaac', 'aaag', 'aaat', 'aaca', 'aacc', 'aacg', 'aact', 'aaga', 'aagc',
> 'aagg', 'aagt', 'aata', 'aatc', 'aatg', 'aatt', 'acaa', 'acac', 'acag', 'acat',
> ...[snip]...
> 'ttgg', 'ttgt', 'ttta', 'tttc', 'tttg', 'tttt']
>
>:-)
Lovely! I knew there must be a list-comprehension based answer. There
was a similar thread back in 2001, which contained the following answers
to the related problem of "find the combinations of the members of n
variable-length lists":
def CartesianProduct(alist):
res = []
if len(alist) < 2:
for x in alist[0]:
res.append([x])
else:
tails = CartesianProduct(alist[1:])
for x in alist[0]:
for t in tails:
res.append([x]+t)
return res
print CartesianProduct(["a","c","g","t" for x in range(4)])
being David Ullrich's recursive solution. My non-recursive solution was
deliberately contrary at the time, and hasn't aged well :)
Anyway, the OP appears to be doing bioinformatics, so the general case
might be useful to him later...
- Andrew
--
Andrew Walkingshaw | andrew-usenet at lexical.org.uk
More information about the Python-list
mailing list