Listen oder Tupel eintragweise verknüpfen

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
HannesKlarner
User
Beiträge: 7
Registriert: Montag 4. Mai 2009, 11:16
Wohnort: Berlin

Montag 4. Mai 2009, 17:27

Hi,

ich suche einen operator, op, der Listen oder Tupel eintragweise verknüpft. Z.B.

[1,2,3] op [9,8,8] = [10, 10, 11]

Insbesondere möchte ich +, -, *, ** elementweise ausführen. Kennt jemand einen?

Grüße,
Hannes.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Montag 4. Mai 2009, 17:31

Code: Alles auswählen

from operator import add

a = [1, 2, 3]
b = [9, 8, 8]
c = map(add,a,b)
P.S. Falsche Subforum ...
HannesKlarner
User
Beiträge: 7
Registriert: Montag 4. Mai 2009, 11:16
Wohnort: Berlin

Montag 4. Mai 2009, 17:40

P.S. Falsche Subforum ...
Hab versucht das Thema mit Edit zu verchieben, als ichs bemerkt hatte. Geht anscheinend nicht nachträglich.

Danke für die schnellen Antworten.

Hannes.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Montag 4. Mai 2009, 17:45

So geht's auch:

Code: Alles auswählen

map(sum,zip(a,b))
Edit: Unter Umständen ist eine Funktion anstelle von sum notwendig.
Etwa so:

Code: Alles auswählen

mul=lambda a:a[0]*a[1]
Zuletzt geändert von hendrikS am Montag 4. Mai 2009, 17:53, insgesamt 2-mal geändert.
BlackJack

Montag 4. Mai 2009, 17:49

Falls die Menge der Zahlen grösser, oder die Anordnung "mehrdimensionaler" werden sollte, könnte man auch `numpy`-Arrays bemühen:

Code: Alles auswählen

In [15]: import numpy

In [16]: a = numpy.array([1, 2, 3])

In [17]: b = numpy.array([9, 8, 8])

In [18]: a + b
Out[18]: array([10, 10, 11])
Das wäre dann aber eine externe Bibliothek.
HannesKlarner
User
Beiträge: 7
Registriert: Montag 4. Mai 2009, 11:16
Wohnort: Berlin

Montag 4. Mai 2009, 17:59

super, danke.
oder die Anordnung "mehrdimensionaler" werden sollte, könnte man auch `numpy`-Arrays bemühen
Stimmt, map funktioniert nur mit eindimensionalen Dingen. Mehrdimensional brauch ich gerade nicht, aber wenns soweit ist denk ich dran.
Sitze hier an einem Linux Rechner in der Uni und import numpy liefert eine Meldung zurück, die sagt, daß es kein Modul mit diesem Namen gibt.
Weiß nicht genau, ob man Administratorenrechte braucht um ein Python Modul zu installieren?!
map(sum,zip(a,b))
was macht zip(a,b) ?
BlackJack

Montag 4. Mai 2009, 18:06

`zip()` macht das was in der Dokumentation steht. ;-)

Code: Alles auswählen

In [20]: a = [1, 2, 3]

In [21]: b = [9, 8, 8]

In [22]: zip(a, b)
Out[22]: [(1, 9), (2, 8), (3, 8)]
Man kann bei Python vieles auch sehr einfach "live" ausprobieren.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Montag 4. Mai 2009, 18:18

@hendrikS:

Code: Alles auswählen

from operator import mul
... und man braucht keine eigene Definition. Und wenn die Funktion wirklich kompliziert werden: numpy oder scipy.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Montag 4. Mai 2009, 18:24

CM hat geschrieben:@hendrikS:

Code: Alles auswählen

from operator import mul
... und man braucht keine eigene Definition.
Nicht wirklich -- du bräuchtest ``uncurry(operator.mul)``.

``from haskell import uncurry`` vorausgesetzt. :D
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
bords0
User
Beiträge: 170
Registriert: Mittwoch 4. Juli 2007, 20:40

Dienstag 5. Mai 2009, 13:09

oder

Code: Alles auswählen

map(partial(reduce, mul), zip(a, b))
Antworten