[Python-de] 1,2,3,5,7,8,9 -> "1-3,5,7-9"

Jochen Wersdörfer jochen-python at wersdoerfer.de
Fre Jun 18 11:53:04 CEST 2004


Frank Immich wrote:
> 
> irgendwie habe ich das Gefühl: Das muss einfacher gehen ?
> Vielleicht hat ja jemand Lust auf diese kleine morgendliche
> Denksportaufgabe...

Ob das jetzt einfacher oder eleganter ist, weiß ich nicht, aber es
geht mit ein 2 Hilfsfunktionen in einer Zeile :->...

def lastNum(s):
    i = 1
    if len(s) == 1: return 2
    else:
        while((len(s) - i > 0) and s[-i].isdigit()): i = i + 1
    return i

def stripDashes(s):
    d = s.split("-")
    if len(d) > 1: return '-'.join((d[0], d[-1]))
    return s

l=[3,5,6,7,8,9,10,11,12,22,23,24,25,26,32,34,36,38,39,40,41,44,45,47]
l[0] = str(l[0])

[stripDashes(i) for i in reduce(lambda x, y:("%s-%s" % (x, y), "%s,%s" % (x, y))[y != int(x[-lastNum(x) + 1:]) + 1], l).split(",")]

Gruss,
Jochen