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.
Listen oder Tupel eintragweise verknüpfen
Code: Alles auswählen
from operator import add
a = [1, 2, 3]
b = [9, 8, 8]
c = map(add,a,b)
-
- User
- Beiträge: 7
- Registriert: Montag 4. Mai 2009, 11:16
- Wohnort: Berlin
Hab versucht das Thema mit Edit zu verchieben, als ichs bemerkt hatte. Geht anscheinend nicht nachträglich.P.S. Falsche Subforum ...
Danke für die schnellen Antworten.
Hannes.
So geht's auch:
Edit: Unter Umständen ist eine Funktion anstelle von sum notwendig.
Etwa so:
Code: Alles auswählen
map(sum,zip(a,b))
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.
Falls die Menge der Zahlen grösser, oder die Anordnung "mehrdimensionaler" werden sollte, könnte man auch `numpy`-Arrays bemühen:
Das wäre dann aber eine externe Bibliothek.
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])
-
- User
- Beiträge: 7
- Registriert: Montag 4. Mai 2009, 11:16
- Wohnort: Berlin
super, danke.
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?!
Stimmt, map funktioniert nur mit eindimensionalen Dingen. Mehrdimensional brauch ich gerade nicht, aber wenns soweit ist denk ich dran.oder die Anordnung "mehrdimensionaler" werden sollte, könnte man auch `numpy`-Arrays bemühen
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?!
was macht zip(a,b) ?map(sum,zip(a,b))
`zip()` macht das was in der Dokumentation steht.
Man kann bei Python vieles auch sehr einfach "live" ausprobieren.
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)]
@hendrikS:
... und man braucht keine eigene Definition. Und wenn die Funktion wirklich kompliziert werden: numpy oder scipy.
Code: Alles auswählen
from operator import mul
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Nicht wirklich -- du bräuchtest ``uncurry(operator.mul)``.CM hat geschrieben:@hendrikS:... und man braucht keine eigene Definition.Code: Alles auswählen
from operator import mul
``from haskell import uncurry`` vorausgesetzt.
oder
Code: Alles auswählen
map(partial(reduce, mul), zip(a, b))