[Python-de] 1,2,3,5,7,8,9 -> "1-3,5,7-9"
René Liebscher
R.Liebscher at gmx.de
Fre Jun 18 10:54:39 CEST 2004
- Vorherige Nachricht: [Python-de] 1,2,3,5,7,8,9 -> "1-3,5,7-9"
- Nächste Nachricht: [Python-de] 1,2,3,5,7,8,9 -> "1-3,5,7-9"
- Nachrichten sortiert nach:
[ Datum ]
[ Thema ]
[ Betreff (Subject) ]
[ Autor ]
René Liebscher schrieb:
> Frank Immich schrieb:
>
>> Hallo zusammen,
>> 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"
>>
>> hier mein kläglicher Vesuch...
>> irgendwie habe ich das Gefühl: Das muss einfacher gehen ?
>> Vielleicht hat ja jemand Lust auf diese kleine morgendliche
>> Denksportaufgabe...
>>
>> Vielen Dank Grüße Frank
>>
>> ...
>
> Denksportaufgaben sind immer eine Herausforderung ;-)
>
> Ob das folgende einfacher ist, weiss ich auch nicht. Aber ich finde es
> übersichtlicher. (Ausserdem wollte ich schon immer mal Generatoren
> ausprobieren. Und das scheint mir ein guten Anwendungsfall zu sein. Mit
> filter,reduce und co. kommt man nicht so richtig weiter, weil man sich
> den letzten Zustand/Ausgabe irgendwie merken muss.)
>
> MfG
> Rene
>
Da muss ich mich selber korrigieren, man kann ja in reduce auch die
bereits gebaute Liste als Zustandsspeicher missbrauchen.
Das sieht dann so aus. (Ist sogar noch kuerzer als die andere Variante.
Wie das von der Laufzeit bei sehr grossen Eingabelisten aussieht, ist
eine andere Sache, weil je für jedes Element eine neue Liste angelegt wird.)
def y(list,element):
if len(list) == 0:
return [element]
# Nachfolger von letzem in der liste
if list[-1] == element-1:
# liste erst angefangen oder irgendwas wie '... , x' drin
if len(list)<2 or list[-2]==',':
# anhaengen
return list+['-',element]
else:
# letztes Element in Liste austauschen
return list[:-1]+[element]
else:
# neues anhaengen
return list+[',',element]
print string.join(
# die Zahlen muessen noch Strings werden
map(str,
reduce(y,[3,5,6,7,8,9,10,11,12,22,23,24,25,26,32,34,36,38,39,40,41,44,45,47],[])
),"")
- Vorherige Nachricht: [Python-de] 1,2,3,5,7,8,9 -> "1-3,5,7-9"
- Nächste Nachricht: [Python-de] 1,2,3,5,7,8,9 -> "1-3,5,7-9"
- Nachrichten sortiert nach:
[ Datum ]
[ Thema ]
[ Betreff (Subject)]
[ Autor ]