2016-10-11 4 views
1

나는 q = [[7,2,3],[4,5,6]]r=[[6,1,2],[3,4,5]]입니다. 나는 q를 r의 해당 원소로 나눌 필요가있다. (즉 [[7/6,2/1,3/2],[4/3,5/4,6/5]])목록을 파이썬에서 다른 목록 목록으로 나누는 방법은 무엇입니까?

출력 필요한 B = [1.16,2,1.5], [1.33,1.25,1.2]

번호 :

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

그러나 오류가 계속 발생합니다. TypeError : float() 인수는 문자열 또는 숫자 여야합니다. 나는 미래로부터 부문을 수입했다. 어떤 제안?

+2

서브리스트 자체가 아닌 서브리스트 *에서 * 값을 반복 할 필요가 있습니다. 지금 당신은 목록을 수레로 변환하려고합니다 ... – Li357

+3

numpy이 그것을 할 것입니다! – Julien

+0

numphy 사용에 익숙하지 않습니다.이 코드에 대한 제안 사항이 있습니까? – Biotechgeek

답변

8

사용 zip 다음 페어 함께 하위 목록을 가지고와 함께 대응의 분자와 분모를 가지고 다시 사용 : 당신이 할 수있는

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

감사합니다. 목록의 목록에서 하나의 요소로 나눈 정수에 대해 어떻게 작동합니까? 내가 게시 한 이것 (http://stackoverflow.com/q/39969884/6820344) 질문에서 그것을 시도했다. "실패한 출력"에서이 유형의 분할을 수행 할 수 없음을 알 수 있습니다. – Biotechgeek

+0

파이썬 2의 경우, subq에 대해서는'[float (n)/d, z는 (subq, subr)에]}' – dawg

+1

파이썬 2의 경우, __future__ 수입 구분''. –

2

을 :

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

을 또는 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  ]]) 

또는 int 리터럴이있는 경우 :

>>> 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  ]])