ich habe das Problem, aus einer flachen Liste wieder etwas strukturiertes zu machen, um das dann weiterzuverarbeiten. Konkret sind Gruppen von Daten durch eine oder mehrere "leere" Elemente getrennt. Ich möchte deshalb eine Funktion schreiben, die aus der flachen Liste eine Liste von Listen mit den "Nutzdaten" macht. Ich habe das auch umgesetzt, aber mir kommt meine Lösung so umständlich vor, da muss es doch bessere Möglichkeiten geben. Ich hatte es zunächst mit itertools.takewhile() versucht (also abwechselnd durch die leeren und die nichtleeren Elemente zu iterieren) dabei aber immer den letzten nichtleeren Datensatz "verloren".
Hier meine unschöne Funktion:
Code: Alles auswählen
import itertools as it
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = it.tee(iterable)
next(b, None)
return it.izip(a, b)
def unflat(entries):
groups = []
group_entries = []
for entry, next_entry in pairwise(entries):
if entry:
group_entries.append(entry)
if not next_entry:
groups.append(group_entries)
group_entries = []
## print groups
return groups
def main():
print unflat([ '','abc' '', '', 'efgh', '', 'a', 'b', 'c', '', 'i', ''])
if __name__ == '__main__':
main()
Code: Alles auswählen
>>>
[['abc'], ['efgh'], ['a', 'b', 'c'], ['i']]