Skip to main content
 首页 » 编程设计

python之散列两个序列中的值时如何处理被零除错误

2025年05月04日17shangdawei

我有两个固定长度的元组列表。此函数计算各个元素的分数(比率)(注意,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) 
    ]