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

Alexander 'boesi' Bösecke boesi.josi at gmx.net
Fre Jun 18 10:48:20 CEST 2004


Hi

Am 18.06.2004 09:24:32 schrieb Frank Immich:

> ich bin irgendwie nicht zufrieden... 
> 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"

Also ohne das ich deinen Code auch nur ansatzweise verstanden hab,
wuerde ich das mit ner Zustandsmaschine machen:

---snip---
liste=[3,5,6,7,8,9,10,11,12,22,23,24,25,26,32,34,36,38,39,40,41,44,45,47]
liste.sort()
status = 0
r = ''

for c in range(len(liste)):
    if status == 0:
        r += '%d' % liste[c]
        status = 1
    elif status == 1:
        if liste[c] == liste[c-1]+1:
            status = 2
            r += '-'
        else:
            r += ',%d' % liste[c]
    elif status == 2:
        if liste[c] != liste[c-1]+1:
            status = 1
            r += '%d,%d' % (liste[c-1], liste[c])

print r
---snap---

Wenn 44,45 nicht als 44-45 dargestellt werden soll, sieht das wie folgt
aus:

---snip---
for c in range(len(liste)):
    if status == 0:
        r += '%d' % liste[c]
        status = 1
    elif status == 1:
        if liste[c] == liste[c-1]+1:
            status = 2
        else:
            r += ',%d' % liste[c]
    elif status == 2:
        if liste[c] == liste[c-1]+1:
            status = 3
            r += '-'
        else:
            status = 1
            r += ',%d,%d' % (liste[c-1], liste[c])
    elif status == 3:
        if liste[c] != liste[c-1]+1:
            status = 1
            r += '%d,%d' % (liste[c-1], liste[c])
---snap---

hoffe das hilft dir weiter

cu boesi
-- 
Wenn de Lüch net waer un dr Neid                     #1671 : icq-intern
gäbs lauter glückliche Leid                      #73628288 : icq-extern
Uhne Lüch un Neid = ganz gewiß                    boesi111 : aim
wär uf dr Ard is Paradies                             i171 : reallife