[EMAIL PROTECTED] wrote: > Hi, > > I have a list of tuples like this: > > [(1423, 2637),(6457, 8345),(9086, 10100),(12304, 15666)] > > Each tuple references coordinates of a big long string and they are in the > 'right' order, i.e. earliest coordinate first within each tuple, and > eearliest tuple first in the list. What I want to do is use this list of > coordinates to retrieve the parts of the string *between* each tuple. So in > my example I would want the slices [2367:6457], [8345:9086] and > [10100:12304]. Hope this is clear.
You could write a for loop that keeps some state. Another way is to preprocess the lists into what you want. zip() makes this easy: >>> data = [(1423, 2637),(6457, 8345),(9086, 10100),(12304, 15666)] >>> >>> first, second = zip(*data) >>> first (1423, 6457, 9086, 12304) >>> second (2637, 8345, 10100, 15666) >>> starts = second[:-1] >>> starts (2637, 8345, 10100) >>> ends = first[1:] >>> ends (6457, 9086, 12304) >>> ranges = zip(starts, ends) >>> ranges [(2637, 6457), (8345, 9086), (10100, 12304)] Now you can get a list of slices of a string s with a simple list comp: slices = [ s[begin:end] for begin, end in ranges ] and of course the creation of ranges can be abbreviated: >>> first, second = zip(*data) >>> ranges = zip(second[:-1], first[1:]) Kent _______________________________________________ Tutor maillist - [email protected] http://mail.python.org/mailman/listinfo/tutor
