Funktion auf jedes Element eines Arrays anwenden

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.
Hell-G
User
Beiträge: 3
Registriert: Mittwoch 17. September 2008, 13:30

Funktion auf jedes Element eines Arrays anwenden

Beitragvon Hell-G » Mittwoch 17. September 2008, 14:03

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 17. September 2008, 14:08

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)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Beitragvon BlackJack » Mittwoch 17. September 2008, 14:19

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.
Hell-G
User
Beiträge: 3
Registriert: Mittwoch 17. September 2008, 13:30

Beitragvon Hell-G » Mittwoch 17. September 2008, 14:23

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()
BlackJack

Beitragvon BlackJack » Mittwoch 17. September 2008, 14:29

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.
Hell-G
User
Beiträge: 3
Registriert: Mittwoch 17. September 2008, 13:30

Beitragvon Hell-G » Mittwoch 17. September 2008, 14:30

@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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder