Seite 1 von 1
Liste in Liste
Verfasst: Donnerstag 12. Juni 2014, 16:42
von _nohtyp_
Ich habe folgende Liste:
Wie schaffe ich es, dass der Teil
in die äußere Liste aufgenommen wird? So:
P.S.: Vielleicht sollte man im Forum einen "Fragen an die Community"-Thread aufmachen, in dem man kleinere Sachen fragen kann.
Re: Liste in Liste
Verfasst: Donnerstag 12. Juni 2014, 16:51
von cofi
Nein, bitte lass es bei einem Thread pro Thema. Alles andere macht es nur der Suche und damit anderen mit aehnlichen Problemen schwer.
Das Stichwort fuer dein Problem heisst "flattening".
Hier der Code fuer den Fall, dass du tatsaechlich nur bis zur Tiefe 1 verschachtelt bist und nur Listen verflachen willst:
Code: Alles auswählen
In [4]: a = ['me', 'me', ['mep', 'di'], 'me']
In [5]: def flatten(xs):
...: flattened = []
...: for x in xs:
...: if isinstance(x, list):
...: flattened.extend(x)
...: else:
...: flattened.append(x)
...: return flattened
...:
In [6]: flatten(a)
Out[6]: ['me', 'me', 'mep', 'di', 'me']
Der Rest bleibt zur Uebung

Re: Liste in Liste
Verfasst: Donnerstag 12. Juni 2014, 16:58
von _nohtyp_
Danke für die Antwort! Ich habe gerade gesehen, dass es vielleicht einfacher ist, dass Problem gar nicht erst zu erzeugen:
Ich will dem Element, welches sich in der Mitte der Liste befindet, einen Buchstaben anhängen. Nach diesem Element soll ein weiteres eingefügt werden:
(Die Anzahl der Elemente ist immer ungerade.) Leider entsteht so eine Liste in der Liste.
Re: Liste in Liste
Verfasst: Donnerstag 12. Juni 2014, 17:17
von cofi
Wenn ich dich jetzt richtig verstehe:
Code: Alles auswählen
In [7]: a = ['me', 'me', 'mep', 'me']
In [8]: def foo(xs):
...: mid = int(len(xs) / 2)
...: xs[mid] = xs[mid] + "a"
...: xs.insert(mid + 1, "di")
...: return xs
...:
In [9]: foo(a)
Out[9]: ['me', 'me', 'mepa', 'di', 'me']
Aber vielleicht solltest du noch einen Schritt zurueck machen und erzaehlen, was du eigentlich vor hast.
Re: Liste in Liste
Verfasst: Donnerstag 12. Juni 2014, 17:24
von _nohtyp_
Vielen Dank! Das hat mein Problem gelöst!

Re: Liste in Liste
Verfasst: Donnerstag 12. Juni 2014, 17:33
von EyDu
_nohtyp_ hat geschrieben:Vielen Dank! Das hat mein Problem gelöst!

Du solltest noch auf die letzte Bemerkung in cofis letztem Beitrag eingehen. Warum willst du das machen, wie lautet das eigentliche Problem? Dein Ansatz sieht nämlich irgendwie seltsam aus.
Re: Liste in Liste
Verfasst: Donnerstag 12. Juni 2014, 18:02
von _nohtyp_
Ist eine Aufgabe, die ich selber lösen soll. Trotzdem Danke.
Re: Liste in Liste
Verfasst: Donnerstag 12. Juni 2014, 19:14
von Sirius3
@cofi: Deine Funktion hat ein zweideutiges Interface, entweder sollte sie eine neue Liste zurückgeben, oder die übergebene Liste ändern, aber nicht beides:
Code: Alles auswählen
def modify_me(xs):
mid = int(len(xs) / 2)
xs[mid:mid+1] = [xs[mid] + "a", "di"]
def modified(xs):
mid = int(len(xs) / 2)
return xs[:mid] + [xs[mid] + "a", "di"] + xs[mid+1:]
Re: Liste in Liste
Verfasst: Donnerstag 12. Juni 2014, 19:56
von cofi
Das ist mir danach aufgefallen, hat mich aber nicht genug gestoert. Slicing fuer die Zuweisung zu benutzen ist aber auf jeden Fall eine gute Idee
@_nohtyp_: Und darum fragst du nach Loesungen fuer Teilprobleme
