У меня есть два списка кортежей фиксированной длины. Эта функция вычисляет долю (отношение) для соответствующих элементов (примечание, fX()
здесь не использует понимание для удобства чтения).
>>> def fX(a,b):
>>> c=[]
>>> for i in range(len(a)):
>>> c.append([a[i][x]/float(a[i][x]+b[i][x]) for x in range(len(a[i]))])
>>> return c
Когда все значения отличны от нуля, fX()
работает:
>>> a[0]=(3, 4, 17, 9.6667, 6.6583, 0.4310, 1)
>>> b[0]=(4, 4, 12, 8.0, 3.2660, 0.0002, 1)
>>> fX(a,b)
>>> [[0.4286, 0.5, 0.5862, 0.5472, 0.6710, 0.9995, 0.5]]
Однако, когда значения любой пары суммируются с нулями, fX()
терпит неудачу:
>>> a[0]=(3, 4, 17, 9.6667, 6.6583, 0.4310, 0)
>>> b[0]=(4, 4, 12, 8.0, 3.2660, 0.0002, 0)
>>> fX(a,b)
Traceback (most recent call last):
File "<pyshell#59>", line 1, in <module>
fX(a,b)
File "<pyshell#52>", line 4, in fX
c.append([a[i][x]/float(a[i][x]+b[i][x]) for x in range(len(a[i]))])
ZeroDivisionError: float division
Мне нужна функция, fY()
, которая дает желаемый результат, не прибегая к тесту грубой силы каждого значения:
>>> a[i]=(3, 4, 17, 9.6667, 6.6583, 0.4310, 0)
>>> b[i]=(4, 4, 12, 8.0, 3.2660, 0.0002, 0)
>>> fY()
>>> [[0.4286, 0.5, 0.5862, 0.5472, 0.6710, 0.9995, 0.0]]
Спасибо.