Terry Reedy wrote: > It makes sense to separate last detection from item processing so last > detection can be put in a library module and reused.
Here's an extension of your idea that puts the detection of both the first and the last item into a generator: def mark_first(items): items = iter(items) yield True, next(items) for item in items: yield False, item def mark_last(items): items = iter(items) prev = next(items) for cur in items: yield False, prev prev = cur yield True, prev def mark_ends(items): return ((head, tail, item) for head, (tail, item) in mark_first(mark_last(items))) for items in "", "a", "ab", "abc": print list(items), "-->", list(mark_ends(items)) for first, last, item in mark_ends("abc"): if first: print "first", if last: print "last", print item It may not be the most efficient approach, but it looks clean. -- http://mail.python.org/mailman/listinfo/python-list