Seite 1 von 1

Funktion auf jedes Element eines Arrays anwenden

Verfasst: Mittwoch 17. September 2008, 14:03
von Hell-G
Hallo zusammen

Ich bin in Sachen Python leider noch ziemlich unerfahren und brauche deshalb Eure Hilfe bei einer ziemlich allgemeinen Frage.
Obwohl die Frage so allgemein ist, habe ich die Antwort nirgends gefunden.

Bei meinem Problem habe ich ein Array gefüllt mit Winkeln (Floats). Nun möchte ich von jedem Winkel den Sinus haben und das Resultat in einem neuen Array abspeichern.

Allgemein gesagt, möchte ich also eine Funktion auf ein Array elementweise anwenden und das Resultat als neues Array speichern.

Ich möchte bei der Lösung verhindern ein leeres Array zu erstellen und es dann mittels einer Schlaufe aufzufüllen. Das scheint mir keine elegante Lösung zu sein.

Vielen Dank für Eure Hilfe!

Gruss, Hell-G

Verfasst: Mittwoch 17. September 2008, 14:08
von Leonidas
Hallo Hell-G, willkommen im Forum,

Ich hoffe mal du meinst mit Array eigentlich eine Liste und kein C-Array.

Jedenfalls gibt es zwei Arten: List Comprehension und ``map()``:

Code: Alles auswählen

neue_liste = [sin(x) for x in alte_liste]
neue_liste = map(sin, alte_liste)

Verfasst: Mittwoch 17. September 2008, 14:19
von BlackJack
Ich habe ja so ein bisschen den Verdacht, dass die Hausaufgabe die Bedingung enthielt, das nicht mit einer leeren Liste und einer Schleife zu machen. ;-)

@Hell-G: Wenn Du "list comprehensions" nicht kennst, hast Du wahrscheinlich das Tutorial aus der Python-Dokumentation noch nicht durch gearbeitet, oder Du solltest es noch einmal tun.

Verfasst: Mittwoch 17. September 2008, 14:23
von Hell-G
Vielen Dank für die schnelle Antwort!

Du hast recht, ich meine natürlich Listen. Sorry, Altlasten :roll:

Beide Lösungen funktionieren einwandfrei und ergeben das gewünschte Resultat. Ist eine Variante zu bevorzugen?

Edit: Habe die Antwort im Tutorial gleich selbst gefunden
List comprehensions are much more flexible than map()

Verfasst: Mittwoch 17. September 2008, 14:29
von BlackJack
Ist Geschmackssache. Ich persönlich nehme `map()` falls es eine passende Funktion gibt, die ich natürlich auch selbst geschrieben haben kann, und "list comprehensions" wenn ich für's `map()` eine ``lambda``-Funktion definieren müsste, oder wenn ich die Kombination `map()` und `filter()` bräuchte, weil man die in *einer* "list comprehension" ausdrücken kann. Also letztendlich nehme ich das, was ich für lesbarer halte.

Verfasst: Mittwoch 17. September 2008, 14:30
von Hell-G
@BlackJack: Ich wechsle ziemlich häufig zwischen verschiedenen Sprachen und Programmen hin und her. Da vergisst man schon das eine oder andere und hat die Schlüsselwörter beim Durchsuchen der Docs nicht präsent.

Danke trotzdem für die Hilfe.