Seite 1 von 1

Listen oder Tupel eintragweise verknüpfen

Verfasst: Montag 4. Mai 2009, 17:27
von HannesKlarner
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.

Verfasst: Montag 4. Mai 2009, 17:31
von numerix

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

Verfasst: Montag 4. Mai 2009, 17:40
von HannesKlarner
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.

Verfasst: Montag 4. Mai 2009, 17:45
von hendrikS
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]

Verfasst: Montag 4. Mai 2009, 17:49
von BlackJack
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.

Verfasst: Montag 4. Mai 2009, 17:59
von HannesKlarner
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) ?

Verfasst: Montag 4. Mai 2009, 18:06
von BlackJack
`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.

Verfasst: Montag 4. Mai 2009, 18:18
von CM
@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.

Verfasst: Montag 4. Mai 2009, 18:24
von birkenfeld
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

Verfasst: Dienstag 5. Mai 2009, 13:09
von bords0
oder

Code: Alles auswählen

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