Brauche eine kleine Hilfe bei Python

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Brauche eine kleine Hilfe bei Python

      Heyho,
      ich muss gerade eine Aufgabe bearbeiten, in der ich eine Funktion (apply) schreiben soll, die die Reihenfolge einer Liste (lst) durch eine Permutationsvorschrift, die durch ein Tupel (s) gegeben ist, verändern soll. Außerdem soll die Funktion None zurückgeben. Am Ende soll das Ganze dann so aussehen:

      Quellcode

      1. >>> s = (4, 3, 2, 1)
      2. >>> lst = [’s’, ’p’, ’a’, ’m’]
      3. >>> apply(s, lst)
      4. >>> lst
      5. [’m’, ’a’, ’p’, ’s’]


      Ich habe jetzt folgendes geschrieben:


      Quellcode

      1. def apply(s, lst):
      2. lst = [lst[i-1] for i in s]
      was soweit auch funktioniert, aber die Liste wird natürlich nicht global verändert. Das global -Anweisung kann ich scheinbar nicht implementieren, da die Liste ja auch Parameter der Funktion ist und als Rückgabewert soll ja None darstehen.
      Hat jemand eine Idee wie man das löst? (Sorry falls die Frage dämlich ist, ich hab überhaupt keine Ahnung von Programmieren :P )
      [
    • Es geht wohl bei der Aufgabe darum zu verstehen, wie ein Parameter in eine Funktion gegeben wird (Pass by reference). Ich will dir nicht gleich die Lösung verraten, sondern dir einen Hinweis geben (falls du lieber die Lösung direkt willst, sag Bescheid).

      Gehen wir von folgendem Code aus:

      Python-Quellcode

      1. def apply(s, lst):
      2. lst [lst[i-1] for i in s]
      3. print(lst)
      4. s = (4, 3, 2, 1)
      5. lst = ['s', 'p', 'a', 'm']
      6. print(lst)
      7. apply(s, lst)
      8. print(lst)
      Hier wäre die Ausgabe nicht, wie du es möchtest, sondern würde wie folgt aussehen:
      ['s', 'p', 'a', 'm']
      ['m', 'a', 'p', 's']
      ['s', 'p', 'a', 'm']

      Machst du aber folgendes:

      Python-Quellcode

      1. def apply(s, lst):
      2. lst.append('1') # = [lst[i-1] for i in s]
      3. print(lst)
      4. s = (4, 3, 2, 1)
      5. lst = ['s', 'p', 'a', 'm']
      6. print(lst)
      7. apply(s, lst)
      8. print(lst)
      Dann erhälst du folgende Ausgabe:
      ['s', 'p', 'a', 'm']
      ['s', 'p', 'a', 'm', '1']
      ['s', 'p', 'a', 'm', '1']

      Falls du es mit diesem Hinweis schon lösen kannst, teil deine Lösung bitte mit uns :)
    • Deine Lösung ist imho schon das Geschickteste/Schönste. Du musst mit dem Objekt arbeiten was übergeben wird. Hättest also die Liste leeren und dann die inverse Liste appenden können. Sind aber 2 Schritte und auch etwas hässlich.
      There are 10 types of people - those who understand binary, and those who don't.