[2,3,4,7] --> "2-4,7" ?
Scott David Daniels
scott.daniels at acm.org
Fri May 30 15:55:47 EDT 2003
Here's a whack at doing it on-the-fly. The tasks are split
as in Raymond Hettinger's solution. Generators allow a nice
local look at several elements in an incoming stream.
from __future__ import generators
import re
def inputparse(source):
splitter = re.compile('(\D*)(\d*)').match
for name in source:
yield splitter(name).groups()
def grouping(pairsource):
source = iter(pairsource)
lastname, lastnumber = source.next()
startnumber = lastnumber
for name, number in source:
if name == lastname and int(number) == int(lastnumber)+1:
lastnumber = number
else:
yield lastname, startnumber, lastnumber
lastname, startnumber, lastnumber = name, number, number
yield lastname, startnumber, lastnumber
def format(lastname, startnumber, lastnumber):
if startnumber is lastnumber:
return lastname + startnumber
else:
return lastname + startnumber + '-' + lastnumber
if __name__ == '__main__':
names = ['6','7','mx8','mx09','mx10','8','9','10','foo']
print ', '.join([format(name, start, stop) for name, start, stop
in grouping(inputparse(names))])
-Scott David Daniels
Scott.Daniels at Acm.Org
More information about the Python-list
mailing list