Listen auseinandernehmen und wieder zusammenfügen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
toper3902

Hallo zusammen,
ich möchte ein bestimmtes programm schreiben wofür ich eine Liste Teilen und wieder zusammenfügen muss.

Code: Alles auswählen

def split_list(alist, wanted_parts=1):
    length = len(alist)
    return [ alist[i*length // wanted_parts: (i+1)*length // wanted_parts] 
             for i in range(wanted_parts) ]

Liste = "hallo"
Liste2 = list(Liste)
Liste3 = split_list(Liste2, wanted_parts=2)
Liste3.reverse()
print(Liste3)
Mit diesem Code kann ich sie Liste schonmal Teilen(und umdrehen, was für das Programm wichtig ist)
Aber wie schaffe ich es dass am Ende wieder "hallo" rauskommt?
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@toper3902: In dem Du am Ende ``print(Liste)`` schreibst. Du willst doch am Ende ziemlich sicher nicht 'hallo' heraus bekommen, sondern eher 'lohal' oder 'lloha', je nach dem was man da als Mitte ansehen mag.

Was bekommst Du denn ausgegeben und beschreib doch mal was man machen müsste um das dann zur gewünschten Ausgabe umzuformen.

Lass uns mal über Namen reden: `Liste` wird an eine Zeichenkette gebunden, ist also ein falscher Name. Bei `Liste2` und `Liste3` stimmt zwar der Datentyp, aber es sagt dem Leser nichts darüber was da eigentlich an diese Namen gebunden wird. Den interessiert ja die Bedeutung im Kontext des Programms und nicht was für ein Datentyp das ist und das wievielte Objekt mit diesem Typ das ist.

`split_list()` ist vom Namen her auch recht einschränkend. Klar geht das mit Listen, aber eigentlich auch mit jedem anderen Datentyp der eine Länge hat die man mit `len()` ermitteln kann und der Indexzugriff per „slicing“-Syntax erlaubt. Das wäre beispielsweise schon direkt mit der Zeichenkette 'hallo' gegangen! Solche Typen bezeichnet man bei Python in der Regel als „sequence“. Die eingebaute `reversed()`-Funktion kann auch auf beliebigen Sequenztypen arbeiten. Oder man macht sich das wissen über Sequenztypen (also auch Zeichenketten) zunutze das die meisten die „slicing“ unterstützen mit einer negativen Schrittweite umgedreht werden können: 'hallo'[::-1] → 'ollah'.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
toper3902

Tut mir leid, Ich habe die Frage wohl etwas komisch vormuliert.
Das Programm soll am Ende so aufgebaut sein:
1.Ich gebe einen Text ein
2.Dieser Text wir mit dem umdrehen der einzelnen Listenabschnitte "Verschlüsselt"
3.Dieser verschlüsselte Text wir in einer extra Textdatei abgespeichert
4. Beim Neustart des Programms wird diese Datei eingelesen und wieder "entschlüsselt"
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@toper3902: Okay, dann bleibt immer noch die gleiche Frage: Was bekommst Du denn ausgegeben und beschreib doch mal was man machen müsste um das dann zur gewünschten Ausgabe umzuformen.

Beim Entschlüsseln wirst Du interessante Probleme bekommen wenn der Text nicht gleichmässig auf die Anzahl der gewünschten Teile aufgeteilt werden kann. Da müsstest Du dann die Funktion zum Aufteilen entsprechend anpassen das sie je nach dem ob ver- oder entschlüsselt werden soll, etwas anders die Punkte bestimmt, an der die Sequenz aufgeteilt werden muss.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
toper3902

Als Ausgabe bekomme ich:
[['l', 'l', 'o'], ['h', 'a']]
Dieser Teil besteht ja aus 2 Listen.
Im Prinzip müsste ich diese beiden Listen wieder umdrehen und dann umwandeln.
Das umwandeln ist kein problem.
Ich müsste es nur schaffen die beiden Teile umzudrehen und als eine Liste zusammen zu fügen
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@toper3902: Wieso umdrehen? Sind wir jetzt schon beim entschlüsseln? Und was heisst umwandeln?

Umdrehen geht mit der `reverse()`-Methode auf der äusseren Liste, das hast Du doch gerade im Schritt davor selbst gemacht‽

Du solltest vielleicht noch mal *genau* beschreiben was die Verschlüsselung genau machen soll und was da am Ende der Verschlüsselung als Ergebnis stehen soll. 'lloha' nehme ich mal an?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
toper3902

Am Anfang gebe ich hallo ein
In der Textdatei steht dann [['l', 'l', 'o'], ['h', 'a']]
Und das Programm entschlüsselt es wieder zu hallo

Die verschlüsselung teilt die Liste in 2 oder mehr Teile und Dreht die einzelnen Teile um
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@toper3902: Das sollte nicht in der Textdatei stehen. Die Zeichenkettendarstellung von Listen ist was zur Fehlersuche, nichts was man in Dateien speichert und weiterverarbeitet. Da gibt es bessere Formate, die zu dem nicht nur unter Python funktionieren. CSV oder JSON beispielsweise. Für beides gibt es Module in der Standardbibliothek.

Das ist zudem auch recht umfangreich was die Daten angeht die eigentlich gar nicht zum Text gehören. 29 Zeichen um das Wort 'hallo' zu verschlüsseln.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
toper3902

Ok trotzdem vielen dank
Antworten