Rekursion + zwei Listen!

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
Benutzeravatar
machupicchu
User
Beiträge: 61
Registriert: Samstag 1. Juni 2013, 14:04

Hallo, ich habe eine Frage bzgl. Rekursion und Listen.
Ich möchte mit einer Rekursion eine zwei Liste übergeben und in die vierte Liste appenden. Die Liste1 "L1" appende ich in Liste3 "L3". Leider weiß ich nicht, wie ich die Liste2 "L2" in die Liste4 "L4" rekursiv appende.

Beispiel:

Code: Alles auswählen

L1 = [1, 2, 3, 4, 5, 6]
L2 = [7, 8, 9, 10, 11]
L3 = []
L4 = []


def func(L1):
    for list in L1:
        print list
        L3.append(list)
func(L2)

Zuletzt geändert von machupicchu am Montag 10. Juni 2013, 20:22, insgesamt 4-mal geändert.
BlackJack

@machupicchu: Sowohl der Text als auch der Quelltext sind total unverständlich. Beides ist nicht lauffähig. Die Erklärung nicht in meinem Gehirn und der Quelltext nicht mit einem Python-Interpreter.
Benutzeravatar
machupicchu
User
Beiträge: 61
Registriert: Samstag 1. Juni 2013, 14:04

Sorry, war mein Fehler. Hatte die Methode nicht unbenannt. Müsste jetzt funktionieren.
BlackJack

@machupicchu: Mal davon abgesehen, dass der sinnfreie Quelltext jetzt wahrscheinlich lauffähig ist, hat sich nicht viel geändert. Ich verstehe immer noch nicht was Du sagen möchtest. Bin noch nicht mal in der Lage zu raten. Und ich denke nicht, dass das an mir liegt.
Benutzeravatar
machupicchu
User
Beiträge: 61
Registriert: Samstag 1. Juni 2013, 14:04

Also, blackjack!
1. Ich möchte eine Rekursive Methode
2. Habe zwei Listen, möchte diese ausgeben und in eine andere Liste abspeichern.
3. Liste1 "L1" im Code wird ausgeben und in Liste3 hinzugefügt.
4. Dies möchte ich auch mit Liste2 erreichen, in dem ich L2 in L4 hinzufüge.
5. Weiß nicht wie man das rekursiv löst.


D.h. wenn der Parameter L2 durchläuft, dann werden die Werte ebenfalls in die Liste L3 hinzugefügt. Ich möchte diese aber in L4 haben.

Ist es jetzt besser? :K
Zuletzt geändert von machupicchu am Montag 10. Juni 2013, 20:40, insgesamt 1-mal geändert.
BlackJack

@machupicchu: Nicht wirklich. Das fängt bei 1. an, das ist ein völlig unsinnige Ausgangslage. Man möchte keine rekursive Methode/Funktion. Das ist nicht der erste Punkt, sondern der erste Punkt ist ein Problem das man lösen möchte. Und das kann dann eine rekursive Lösung haben, oder auch nicht. Die allermeisten Probleme löst man in imperativen Programmiersprachen, insbesondere wenn sie keine „tail call optimization” haben, *nicht* rekursiv sondern iterativ.

Und das Problem was Du lösen möchtest, hast Du nicht beschrieben. Listen anderen listen hinzufügen geht mit `append()` oder `extend()` auf Listen. Da braucht man keine rekursionen Funktionen für schreiben.

Also was willst Du *eigentlich* lösen? Und warum denkst Du dass das rekursiv passieren muss?
Benutzeravatar
machupicchu
User
Beiträge: 61
Registriert: Samstag 1. Juni 2013, 14:04

Ich möchte eine Rekursion haben, da ich es performanter finde als wenn ich zwei Methoden mit gleicher Funktion schreibe. Ich könnte das Problem mit zwei Methoden folgendermaßen lösen:

Code: Alles auswählen

L1 = [1, 2, 3, 4, 5, 6]
L2 = [7, 8, 9, 10, 11]
L3 = []
L4 = []

def func(L1):
    for list in L1:
        print list
        L3.append(list)

def func2(L2)
    for list in L2:
       print list
       L4.append(list)


Wenn ich jetzt mehrere Listen habe, die ich ausgeben und diese dann auch irgendwann auswerten möchte, dann habe ich irgendwann n Methoden. Deshalb die Rekursion.
Möchte es vom Prinzip her verstehen und es auch in ein größeres Programm implementieren.
BlackJack

@machupicchu: Hier macht Rekursion doch überhaupt keinen Sinn. Du willst hier einfach nur vernünftige Funktionen schreiben, und das sind welche bei denen alle Werte die keine Konstanten sind als Argumente übergeben werden, und nicht einfach so magisch aus dem Modul genommen werden. Dann hast Du nur noch eine Funktion. Und die Listen gehören in einem sauberen Programm nicht auf Modulebene.

Edit: Der Name `list` ist in beiden Funktionen übrigens falsch und verdeckt den eingebauten Datentyp mit diesem Namen.
Benutzeravatar
machupicchu
User
Beiträge: 61
Registriert: Samstag 1. Juni 2013, 14:04

@blackjack,

also soll ich irgendwann 10 oder 100 Methdoen schreiben, die eigentlich das ein und dasselbe tun sollen? :K

Ich glaube du hast mich wirklich nicht verstanden.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo machupicchu,
ich weiß nicht, was Du unter rekursiv verstehst, aber auf jeden Fall etwas anderes als die Mehrheit hier.
Du solltest Begriffe nicht benutzen, deren Definition Dir nicht bekannt ist, das führt nur zu Verwirrung.
Wie Blackjack schon geschrieben hat, sollten alle Funktionen nur Daten verarbeiten, die sie als Argumente übergeben bekommen und das Ergebnis per Rückgabewert zurückgeben. Dann brauchst Du auch nur eine Funktion zu schreiben.

Grüße
Sirius
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dem schliesse ich mich an: Ich habe dich auch nicht verstanden. Dein Problem hat nichts mit Rekursion zu tun, sondern damit, dass du keine sauberen Funktionen hast:

Code: Alles auswählen

In [1]: def func(first, second):
   ...:         for x in first:
   ...:                 second.append(x)
   ...:         

In [2]: L1 = [1, 2, 3, 4, 5, 6]

In [3]: L2 = [7, 8, 9, 10, 11]

In [4]: L3 = []

In [5]: L4 = []

In [6]: 

In [6]: func(L1, L3)

In [7]: func(L2, L4)

In [8]: L3
Out[8]: [1, 2, 3, 4, 5, 6]

In [9]: L4
Out[9]: [7, 8, 9, 10, 11]
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

machupicchu hat geschrieben:also soll ich irgendwann 10 oder 100 Methdoen schreiben, die eigentlich das ein und dasselbe tun sollen?
Nein:

Code: Alles auswählen

def my_extend(target, source):
    for each in source:
        target.append(each)

L1 = [1, 2, 3, 4, 5, 6]
L2 = [7, 8, 9, 10, 11]
L3 = []
L4 = []

my_extend(L3, L1)
my_extend(L4, L2)
Oder einfach so:

Code: Alles auswählen

L1 = [1, 2, 3, 4, 5, 6]
L2 = [7, 8, 9, 10, 11]
L3 = []
L4 = []

L3.extend(L1)
L4.extend(L2)
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
machupicchu
User
Beiträge: 61
Registriert: Samstag 1. Juni 2013, 14:04

@cofi,
super danke. Genau so meinte ich das. Also, hat mich doch jemand verstanden.
Benutzeravatar
machupicchu
User
Beiträge: 61
Registriert: Samstag 1. Juni 2013, 14:04

Danke pillmuncher!
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

machupicchu hat geschrieben:Also, hat mich doch jemand verstanden.
Jetzt solltest du dich nur noch um eigenes Verständnis bemühen. Eine rekursive Funktion ruft sich selbst auf und das ist nichts was in irgendeinem der hier gezeigten Beispiele - auch nicht in deinem - vorgekommen wäre.

Zudem ist eine sinnvolle Beschreibung deines Problems hilfreich, also die Ausgangslage und was du als Ziel erwartest. Beschreibungen wie dein "Ich möchte mit einer Rekursion eine zwei Liste übergeben und in die vierte Liste appenden." sind nicht nur nicht hilfreich, sie verwirren zusätzlich.
Antworten