2013-05-07 29 views
19

Ich habe 2 Listen a und b:Dividieren zwei Listen in Python

a = [3, 6, 8, 65, 3] 
b = [34, 2, 5, 3, 5] 

c gets [3/34, 6/2, 8/5, 65/3, 3/5] 

Ist es möglich, ihr Verhältnis in Python zu erhalten, wie in variable c oben? Ich habe versucht zu schreiben:

a/b 

Und ich erhalte eine Fehlermeldung:

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
TypeError: unsupported operand type(s) for /: 'list' and 'list' 
+6

Definieren Sie "Verhältnis" von zwei Listen. – zch

+0

Und was war Ihre erwartete Leistung? –

+0

Was meinst du mit Listenverhältnis? –

Antwort

7

Sie tun dies mit Liste Verständnis (Element für Element):

div = [ai/bi for ai,bi in zip(a,b)] 

Beachten Sie, dass, wenn Sie wollen float division, müssen Sie dies angeben (oder die ursprünglichen Werte schweben lassen):

fdiv = [float(ai)/bi for ai,bi in zip(a,b)] 
+1

Das habe ich gebraucht! Danke vielmals! – ely

+3

Oder tun 'von __future__ Import Division', oder verwenden Sie Python 3 (wie das OP möglicherweise schon sein). – lvc

+1

@lvc - Ich mag es nicht, einen Import zu machen, der die Bedeutung von Code komplett verändern kann, wenn es nicht absolut notwendig ist. Ein wesentlicher Teil des Codes, den ich schreibe, würde spektakulär brechen, wenn ich "von __future__ Importdivision" mache. – sapi

19
>>> from __future__ import division # floating point division in Py2x 
>>> a=[3,6,8,65,3] 
>>> b=[34,2,5,3,5] 
>>> [x/y for x, y in zip(a, b)] 
[0.08823529411764706, 3.0, 1.6, 21.666666666666668, 0.6] 

Oder in numpy können Sie a/b

>>> import numpy as np 
>>> a=np.array([3,6,8,65,3], dtype=np.float) 
>>> b=np.array([34,2,5,3,5], dtype=np.float) 
>>> a/b 
array([ 0.08823529, 3.  , 1.6  , 21.66666667, 0.6  ]) 
+0

Eigentlich kommt es darauf an, was das OP mit "Aufteilungslisten" meinte. Nehmen wir an, er wollte es im Sinne eines Mengenbruches interpretieren (z. B. Elemente, die in beiden Listen vorkommen). –

+1

@esseks Es scheint, ich habe richtig geraten – jamylak

+0

Raten ist für Kommentare, nicht für Antworten. Eigentlich war das erste, was ich dachte, 'A \ B' gesetzt Bruchteil. –

9

Verwenden zip und eine Liste Verständnis tun:

>>> a = [3,6,8,65,3] 
>>> b = [34,2,5,3,5] 
>>> [(x*1.0)/y for x, y in zip(a, b)] 
[0.08823529411764706, 3.0, 1.6, 21.666666666666668, 0.6] 
15

Die map() Funktion kurze Arbeit dieser Art von Problemen macht eingebauten:

>>> from operator import truediv 
>>> a=[3,6,8,65,3] 
>>> b=[34,2,5,3,5] 
>>> map(truediv, a, b) 
[0.08823529411764706, 3.0, 1.6, 21.666666666666668, 0.6] 
+0

Vielen Dank für diese Antwort! Wenn ich dies von sql-Abfragen mache, die in numpy in Listen umgewandelt werden, bekomme ich 'argument 2 to map() muss die Iteration unterstützen'. Hast du eine Idee, wie du diesen Fehler lösen kannst? – Marine1