2016-10-11 6 views
1

Ich habe q = [[7,2,3],[4,5,6]] und r=[[6,1,2],[3,4,5]]. Ich muss q durch die entsprechenden Elemente in r teilen. (D [[7/6,2/1,3/2],[4/3,5/4,6/5]])Wie teilt man Listen von Listen nach einer anderen Liste von Listen in Python auf?

Output erforderlich B = [[1.16,2,1.5], [1.33,1.25,1.2]]

Code:

B= [[float(j)/float(i) for j in q] for i in r].

Allerdings bekomme ich immer einen Fehler: TypeError: float() Argument muss eine Zeichenfolge oder eine Zahl sein. Ich habe die Teilung aus der Zukunft importiert. Irgendwelche Vorschläge?

+2

Sie müssen über die * Werte in den Unterlisten * iterieren, nicht die Unterlisten selbst. Jetzt versuchst du, Listen in Floats zu konvertieren ... – Li357

+3

numpy wird das für dich tun! – Julien

+0

Ich fühle mich nicht wohl mit numphy, Irgendwelche Vorschläge für diesen Code? – Biotechgeek

Antwort

8

Verwenden zip für bringen die Sublisten paarweise und dann wieder verwenden, zusammen, um die entsprechenden Zähler und Nenner zu bringen:

>>> q = [[7,2,3],[4,5,6]] 
>>> r = [[6,1,2],[3,4,5]] 
>>> [[n/d for n, d in zip(subq, subr)] for subq, subr in zip(q, r)] 
[[1.1666666666666667, 2.0, 1.5], [1.3333333333333333, 1.25, 1.2]] 
+0

Danke. Wie funktioniert das für eine Ganzzahl geteilt durch ein Element in einer Liste von Listen? Ich habe versucht, es in dieser (http://stackoverflow.com/q/39969884/6820344) Frage, die ich gepostet habe, zu tun. Unter "Fehlgeschlagene Ausgabe" können Sie sehen, dass es nicht möglich ist, diese Art von Division durchzuführen. – Biotechgeek

+0

Wenn Python 2, brauchen Sie '[[float (n)/d für n, d in zip (subq, subr)] für subq, subr in zip (q, r)]' – dawg

+1

Fügen Sie für Python 2 '' from hinzu __future__ Einfuhrabteilung''. –

2

Sie tun können:

>>> out=[] 
>>> for s1, s2 in zip(q, r): 
... inner=[] 
... for n, d in zip(s1, s2): 
...  inner.append(float(n)/d) 
... out.append(inner) 
... 
>>> out 
[[1.1666666666666667, 2.0, 1.5], [1.3333333333333333, 1.25, 1.2]] 

Oder verwenden numpy:

>>> q=[[7.,2.,3.],[4.,5.,6.]] 
>>> r=[[6.,1.,2.],[3.,4.,5.]] 
>>> np.array(q)/np.array(r) 
array([[ 1.16666667, 2.  , 1.5  ], 
     [ 1.33333333, 1.25  , 1.2  ]]) 

Oder, wenn Sie int Literale haben:

>>> q=[[7,2,3],[4,5,6]] 
>>> r=[[6,1,2],[3,4,5]] 
>>> np.array(q, dtype=float)/np.array(r) 
array([[ 1.16666667, 2.  , 1.5  ], 
     [ 1.33333333, 1.25  , 1.2  ]])