On Thu, Oct 18, 2012 at 8:01 AM, Spyros Charonis <s.charo...@gmail.com> wrote: > > x = 21 # WINDOW LENGTH > > In [70]: SEQ[0:x] > Out[70]: 'MKAAVLTLAVLFLTGSQARHF' > > In [71]: SEQ[x:2*x] > Out[71]: 'WQQDEPPQSPWDRVKDLATVY' > > In [72]: SEQ[2*x:3*x] > Out[72]: 'VDVLKDSGRDYVSQFEGSALG' > > How could I write a function to automate this so that it does this from > SEQ[0] throughout the entire sequence, i.e. until len(SEQ)?
In your examples, the lower slice limit is 0x, 1x, 2x, and so on. The upper limit is 1x, 2x, 3x, and so on. That should scream that you need a counter, or range/xrange. The lower limit of the last slice should be less than len(SEQ), such that there's at least 1 item in the last slice. So, in terms of range, the start value is 0, and the stop value is len(SEQ). To make things even simpler, range takes an optional step size. This gives you the 0x, 1x, 2x, etc for the start index of each slice. The upper bound is then i+x (corresponding to 1x, 2x, 3x, etc). For example: >>> seq = 'MKAAVLTLAVLFLTGSQARHFWQQDEPPQSPWDRVKDLATVYVDVLK' >>> x = 21 >>> for i in range(0, len(seq), x): ... print(seq[i:i+x]) ... MKAAVLTLAVLFLTGSQARHF WQQDEPPQSPWDRVKDLATVY VDVLK If you're using Python 2.x, use xrange instead of range, and "print" is a statement instead of a function. You can also use a generator expression to create a one-time iterable object that can be used in another generator, a for loop, a comprehension, or as the argument of a function that expects an iterable, such as the list() constructor: >>> chunks = (seq[i:i+x] for i in range(0, len(seq), x)) >>> list(chunks) ['MKAAVLTLAVLFLTGSQARHF', 'WQQDEPPQSPWDRVKDLATVY', 'VDVLK'] _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor