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

Jan Voges jan.voges at gmx.de
Fre Jun 18 11:16:51 CEST 2004


Hallo Frank!

On 18 Jun 2004 at 9:24, Frank Immich wrote:
> Ich würde gerne aus einer Liste:
> z.b.
> 1,2,3,5,7,8,9,11
> einen String generieren, wobei fortlaufende Reihen zusammengefasst werden.
> ->  "1-3,5,7-9,11"
> 

Von mir noch eine eher 'textuelle', denn algorithmische Lösung, bei 
der ich alle "-<zahl>-"-Folgen am Schluss lösche:

import re
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.sort() 
r="" 
for i in xrange(len(l)-1):
    if l[i+1] - l[i] == 1:   r += str(l[i])+"-"
    else:                    r += str(l[i])+","
r += str(l[-1])
print r
r = re.sub(r"-(\d+-)+","-",r)
print r

Die Ausgabe wäre:
3,5-6-7-8-9-10-11-12,22-23-24-25-26,32,34,36,38-39-40-41,44-45,47
3,5-12,22-26,32,34,36,38-41,44-45,47

Ich erläutere den Regulären Ausdruck erstmal nicht, da Du damit ja 
vielleicht vertraut bist. 
Funktioniert nur für positive Ganzzahlen.

Jan