On 29 Aug 2008, at 13:49, Bruce Frederiksen wrote:
Bruce Leban wrote:
For example:
result = "" for x in items: result += str(x) interstitially: result += ", " contrariwise: result = "no data"
We already have statements that only apply within loops (break and continue), how about some expressions that only apply in for loops: 'last' and 'empty':
for x in items: result += str(x) if not last: result += ', ' else: if empty: result = "no data"
-bruce (not to be confused with Bruce :-)
note that this can be achieved without 'empty' for x in items: result += str(x) if last: break else: result += ', ' else: result = "no data" Something like this can be implemented in Python with the following helper function: def flaglast(iterable): it = iter(iterable) for prev in it: break else: return for item in it: yield prev, False prev = item yield prev, True E.g.
list(flaglast([1,2,3])) [(1, False), (2, False), (3, True)]
Then you can write your code snippet as: for x, last in flaglast(items): result += str(x) if last: break else: result += ', ' else: result = "no data" -- Arnaud