Подтвердить что ты не робот

Разделите два списка в python

У меня есть 2 списка a и b:

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

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

Можно ли получить их отношение в Python, как в переменной c выше? Я попытался ввести:

 a/b

И я получаю сообщение об ошибке:

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

Ответ 1

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

Или в numpy вы можете сделать 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       ])

Ответ 2

Встроенная функция map() делает короткую работу по этим проблемам:

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

Ответ 3

Используйте zip и понимание списка:

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

Ответ 4

Вы можете сделать это, используя понимание списка (по элементам):

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

Обратите внимание, что если вы хотите разделить float, вам нужно указать это (или сделать исходные значения плавающими):

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