Und wie stellst Du fest, welche Elemente von Deinem out_data in EINE Zeile gehören?.robert hat geschrieben:@Hyperion: meine "Lösung" ist erst mal nur ein simpler Parser, der Sequenzen mit den gegebenen Bedingungen erkennt und ausgibt.
Ich würde die dann in eine neue Datei schreiben, denke ich, dann gibt es kein Problem mit neuen Zeilen
Zeilen kuerzen
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Anders formuliert: Du fügst in Deinem Ergebnis für jede Sequenz von >29 einen neuen Wert in Deiner Ergebnisliste ein. Was machst Du bei mehreren Sequenzen von >29 in einer Zeile?
(eben einen neuen Wert in der Ergebnisliste - das war aber imho nicht gewünscht)
(eben einen neuen Wert in der Ergebnisliste - das war aber imho nicht gewünscht)
Hallo
Der Vollständigkeit halber noch eine Lösung mit re.
Gruß Karo
Der Vollständigkeit halber noch eine Lösung mit re.
Code: Alles auswählen
s = """83,80,80,80,80,81,81,81,81,81,81,82,10000,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83,66,66,66,66,66,66
66,66,66,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83,66,66,66
66,66,66,66,66,66,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83
66,66,66,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,80,80,80,83
83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83
65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65
83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,66,66,66,66,66,66,66,66,66,66,66,66,66,66
83,83,83,65,65,65,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83
83,83,65,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83,65,83,83
68,77,88,89,88,88,88,89,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66
68,77,88,89,88,88,88,89,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66
97,97,97,97,97,97,97,97,97,97,97,86,82,69,91,85,85,88,91,72,91,93,91,97,97,97,97,97,95,91,77,69,77,95,95,93
79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79"""
import re
print '\n'.join(re.findall(r'((?:(?:\d{3,}|79|[89][0-9]),?){30,})', s)).replace(',\n','\n')
Ja, da hast du recht. Meine 'Lösung' geht ein wenig an der Aufgabenstellung vorbei.Hyperion hat geschrieben:Anders formuliert: Du fügst in Deinem Ergebnis für jede Sequenz von >29 einen neuen Wert in Deiner Ergebnisliste ein.
Hab halt nicht drüber nachgedacht...

@.robert: Warum wird z.b. die letzte Zeile von in_data gelöscht? Wozu brauch man "i and" in der if Anweisung.
Wie könnte man dein Code korigieren?
@Hyperion: Habe dein Code wie folgt erweitert:
aber warum wird z.B. die letzte Zeile gelöscht. Wie könnte man dein Code korigieren?
@Ronnie: Deine Lösung löscht alle wert kleiner 79 und vergleicht anschließen ob die übrig geblieben Sequenz größer ist als 29. Die 79 ist wie eine grenze wenn ein Wert unterhalb dieser sinkt dann wird die bisdahin gefundene Sequenz geprüft ob diese länger ist als 29. Wenn nicht und der nächste Wert >= 79 ist dann wird der rest Zeile geprüft.
@karolus: Deine Lösung scheint zu funktionieren, aber was bedeutet die [89]?
Wie könnte man dein Code korigieren?
@Hyperion: Habe dein Code wie folgt erweitert:
Code: Alles auswählen
def shorten(row, vallimit=79, rowlimit=29):
values = map(int, row.strip().split(","))
res = []
tmp = []
for val in values:
if val >= vallimit:
tmp.append(val)
else:
if len(tmp) > rowlimit:
res.extend(tmp)
tmp = []
if res:
return ",".join(map(str, res))
in_data = """83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83,66,66,66,66,66,66
66,66,66,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83,66,66,66
66,66,66,66,66,66,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83
66,66,66,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,80,80,80,83
83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83
65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65
83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,66,66,66,66,66,66,66,66,66,66,66,66,66,66
83,83,83,65,65,65,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83
83,83,65,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83,65,83,83
68,77,88,89,88,88,88,89,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66
68,77,88,89,88,88,88,89,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66
97,97,97,97,97,97,97,97,97,97,97,86,82,69,91,85,85,88,91,72,91,93,91,97,97,97,97,97,95,91,77,69,77,95,95,93
79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79"""
for line in in_data.split("\n"):
print shorten(line)
@Ronnie: Deine Lösung löscht alle wert kleiner 79 und vergleicht anschließen ob die übrig geblieben Sequenz größer ist als 29. Die 79 ist wie eine grenze wenn ein Wert unterhalb dieser sinkt dann wird die bisdahin gefundene Sequenz geprüft ob diese länger ist als 29. Wenn nicht und der nächste Wert >= 79 ist dann wird der rest Zeile geprüft.
@karolus: Deine Lösung scheint zu funktionieren, aber was bedeutet die [89]?
Das ist hier Teil eines regulären Ausdrucks.mit hat geschrieben:@karolus: Deine Lösung scheint zu funktionieren, aber was bedeutet die [89]?
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Das Problem ist, dass nach dem Ende der Schleife nicht überprüft wird, was evtl. noch in tmp drin ist. Das müßte man noch mal gegen die Länge 29 prüfen und dann an res anfügen.mit hat geschrieben: aber warum wird z.B. die letzte Zeile gelöscht. Wie könnte man dein Code korigieren?
Code: Alles auswählen
def shorten(row, vallimit=79, rowlimit=29):
values = map(int, row.strip().split(","))
res = []
tmp = []
for val in values:
if val >= vallimit:
tmp.append(val)
else:
if len(tmp) > rowlimit:
res.extend(tmp)
tmp = []
# neu
if len(tmp) > rowlimit:
res.extend(tmp)
if res:
return ",".join(map(str, res))
Danke, deine Korrektur funktioniert. Habe also versucht es zu verschönern wie du es beschrieben hast bekomme aber diesen Fehler:
Der Code sieht wie folgt aus:
Was mache ich falsch?
Code: Alles auswählen
File "H.py", line 17
return ",".join(map(str, res))
^
IndentationError: expected an indented block
Code: Alles auswählen
def shorten(row, vallimit=79, rowlimit=29):
values = map(int, row.strip().split(","))
res = []
tmp = []
for val in values:
if val >= vallimit:
tmp.append(val)
else:
# neu
res.extend(tmp)
tmp = []
# neu
for i in res:
if len(i) > rowlimit:
return ",".join(map(str, res))
in_data = """83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83,66,66,66,66,66,66
66,66,66,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83,66,66,66
66,66,66,66,66,66,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83
66,66,66,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,80,80,80,83
83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83
65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65
83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,66,66,66,66,66,66,66,66,66,66,66,66,66,66
83,83,83,65,65,65,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83
83,83,65,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83,65,83,83
68,77,88,89,88,88,88,89,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66
68,77,88,89,88,88,88,89,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66
97,97,97,97,97,97,97,97,97,97,97,86,82,69,91,85,85,88,91,72,91,93,91,97,97,97,97,97,95,91,77,69,77,95,95,93
79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79"""
for line in in_data.split("\n"):
print shorten(line)
@mit: Ich glaube das wurde schonmal erwähnt, dass man keine Tabs zum Einrücken verwenden sollte. In der Zeile hast Du Tabs und Leerzeichen vermischt. Da fällt man dann subtil auf die Nase.
Wobei man bei gute Editoren / IDE's die Einrückung in Leerzeichen pro Tab einstellen kann
the more they change the more they stay the same
Werde die Einrückungen korrigieren.
In der zwischen Zeit habe ich versucht den Originalen Code von Hyperion zu erweitern um die Start und Endposition des gefunden Fragmentes mit auszugeben, aber leider bekomme ich falsche Werte.
Die Ausgabe sieht wie folgt aus:
Was mache ich falsch?
In der zwischen Zeit habe ich versucht den Originalen Code von Hyperion zu erweitern um die Start und Endposition des gefunden Fragmentes mit auszugeben, aber leider bekomme ich falsche Werte.
Code: Alles auswählen
def shorten(row, vallimit=79, rowlimit=29):
values = map(int, row.strip().split(","))
res = []
tmp = []
startPos = 0
aktulPos = 0
neuePos = False
for val in values:
if val >= vallimit:
if (neuePos == False):
startPos += 1
tmp.append(val)
else:
if len(tmp) > rowlimit:
res.extend([tmp, startPos, aktulPos - 1])
tmp = []
startPos = aktulPos
aktulPos +=1
# neu
if len(tmp) > rowlimit:
res.extend([tmp, startPos, aktulPos - 1])
if res:
return ",".join(map(str, res))
in_data = """83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83,66,66,66,66,66,66
66,66,66,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83,66,66,66
66,66,66,66,66,66,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83
66,66,66,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,80,80,80,83
83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83
65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65
83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,66,66,66,66,66,66,66,66,66,66,66,66,66,66
83,83,83,65,65,65,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83
83,83,65,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83,65,83,83
68,77,88,89,88,88,88,89,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66
68,77,88,89,88,88,88,89,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66
97,97,97,97,97,97,97,97,97,97,97,86,82,69,91,85,85,88,91,72,91,93,91,97,97,97,97,97,95,91,77,69,77,95,95,93
79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79"""
i = 0
for line in in_data.split("\n"):
i += 1
print str(i) + " ",
print shorten(line)
Code: Alles auswählen
1 [83, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 80, 83],30,29
2 [83, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 80, 83],32,32
3 [83, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 80, 83],35,35
4 [83, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 83],35,35
5 [83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83],36,35
6 None
7 None
8 [83, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 80, 83],35,35
9 [83, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 80, 80, 80, 80, 80, 80, 80, 83],32,32
10 None
11 None
12 None
13 [79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79],36,35
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Imho alles! Indem Du nämlich Dinge zu Deiner Aufgabenstellung hinzunimmst, die sich mit der ursprünglichen beißen.mit hat geschrieben:Was mache ich falsch?
Die Start-End-Positionen einer jeden Sequenz verkomplizieren das doch immens, da es ja beliebig viele pro Zeile geben kann. Also müßtest Du dann die Datenstruktur entsprechend erweitern. Zudem ist dann die Frage, wie das entgültige Ausgabeformat aussehen soll. Bisher sollten ja wieder alle Werte als CSV ausgegeben werden.
Also: Spezifiziere mal, genau, was Du haben willst. Dann kann man über eine geeignete Ziel-Datenstruktur nachdenken und dann über eine Formatierungsfunktion für die Ausgabe.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Das hättest Du auch mal eher sagen können...mit hat geschrieben:Es darf nur ein Fragment geben, da die Mindestlänge 30 so gewählt wird dass es nur ein Fragment geben kann oder gar kein.
Na das ist doch simpelDie Methode sollte nur die Start und Endpostion des gefunden Fragment zurück liefern.
Code: Alles auswählen
def shorten(row, vallimit=79, rowlimit=29):
values = map(int, row.strip().split(","))
# positionen (nicht im String, sondern in der Werteliste!)
start = stop = 0
# zustand merken
in_seq = False
for index, val in enumerate(values):
if val >= vallimit:
if not in_seq:
start = index
in_seq = True
else:
stop = index
in_seq = False
if stop - start > rowlimit:
return start, stop
Ich bekomme folgende Falsche ausgabe:
mit diesem Test code:
Die 13te Zeile müsste von 0 bis 36 angezeigt werden und die 3te Zeile müsste von 6 bit 36 gehen.
Wie könnte man es korrigieren?
Code: Alles auswählen
1 (0, 30)
2 (3, 33)
3 None
4 None
5 None
6 (0, 30)
7 (0, 30)
8 None
9 (3, 33)
10 (2, 32)
11 (2, 32)
12 None
13 None
Code: Alles auswählen
def shorten(row, vallimit=79, rowlimit=29):
values = map(int, row.strip().split(","))
# positionen (nicht im String, sondern in der Werteliste!)
start = stop = 0
# zustand merken
in_seq = False
for index, val in enumerate(values):
if val >= vallimit:
if not in_seq:
start = index
in_seq = True
else:
stop = index
in_seq = False
if stop - start > rowlimit:
return start, stop
in_data = """83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83,66,66,66,66,66,66
66,66,66,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83,66,66,66
66,66,66,66,66,66,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83
66,66,66,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,80,80,80,83
83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83
65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65
83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,66,66,66,66,66,66,66,66,66,66,66,66,66,66
83,83,83,65,65,65,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83
83,83,65,83,80,80,80,80,81,81,81,81,81,81,82,82,82,82,82,82,83,83,83,83,83,80,80,80,80,80,80,80,83,65,83,83
68,77,88,89,88,88,88,89,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66
68,77,88,89,88,88,88,89,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66
97,97,97,97,97,97,97,97,97,97,97,86,82,69,91,85,85,88,91,72,91,93,91,97,97,97,97,97,95,91,77,69,77,95,95,93
79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79"""
i = 0
for line in in_data.split("\n"):
i += 1
print str(i) + " ",
print shorten(line)
Wie könnte man es korrigieren?
Eigeninitiative == 0?
Trotzdem aufbauend auf Hyperions ungetesteter Vorarbeit:AusgabeMfG
HWK
Edit: Der Ansatz mit der Regex war zwar auf die Grenze von 79 fixiert, sah doch sonst aber ganz nett aus. Hier die Anpassung:
Edit2: Noch eine wohl eher ineffektive Variante zur Demonstration von itertools.groupby:
Trotzdem aufbauend auf Hyperions ungetesteter Vorarbeit:
Code: Alles auswählen
def shorten(row, vallimit=79, rowlimit=29):
values = map(int, row.strip().split(','))
# positionen (nicht im String, sondern in der Werteliste!)
start = stop = 0
# zustand merken
in_seq = False
for index, val in enumerate(values):
if val >= vallimit:
if not in_seq:
start = index
in_seq = True
elif in_seq:
stop = index
in_seq = False
if stop - start > rowlimit:
return start, stop - 1
if in_seq and index + 1 - start > rowlimit:
return start, index
Code: Alles auswählen
1 (0, 29)
2 (3, 32)
3 (6, 35)
4 (3, 35)
5 (0, 35)
6 None
7 None
8 (6, 35)
9 (3, 32)
10 None
11 None
12 None
13 (0, 35)
HWK
Edit: Der Ansatz mit der Regex war zwar auf die Grenze von 79 fixiert, sah doch sonst aber ganz nett aus. Hier die Anpassung:
Code: Alles auswählen
def shorten(row):
result = re.search(r'((?:(?:\d{3,}|79|[89][0-9]),){30,})', row.rstrip() + ',')
if result:
return result.start(1) / 3, result.end(1) / 3 - 1
Code: Alles auswählen
def shorten(row, vallimit=79, rowlimit=29):
values = map(int, row.strip().split(','))
result = groupby(values, lambda x: x >= vallimit)
start = 0
for k, r in result:
length = len(list(r))
if k and length > rowlimit:
return start, start + length - 1
start += length