我有两个固定长度的元组列表。此函数计算各个元素的分数(比率)(注意,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]]
谢谢。
请您参考如下方法:
def f_cell(a, b):
try: return a / float(a + b) # EAFP
except: return 0.0 # Or whatever other value you want for this case.
def fY(a,b):
return [
[f_cell(a_cell, b_cell) for a_cell, b_cell in zip(a_row, b_row)]
for a_row, b_row in zip(a, b)
]
