【问题标题】:short version of for-loop with division by zero [duplicate]被零除的for循环的简短版本[重复]
【发布时间】:2018-12-16 20:00:19
【问题描述】:

为了直接解决问题,我有以下数据。

A = [170,170,150]
b = 160
C = [2,2]
xb = [b/(k-1) for k in C]
print(xb)

输出:

[160.0, 160.0]

现在更改 C 列表:

A = [170,170,150]
b = 160
C = [2,1]
xb = [b/(k-1) for k in C]
print(xb)

输出:

Error ZeroDivisionError: division by zero

好的,预计不会运行,现在我们找到了运行它的解决方案。

xb = []
for k in C:
    try:
        xb.append(b/(k-1))
    except ZeroDivisionError:
        xb.append(0)
print(xb)

输出:

[160.0, 0]

我的问题是如何编写上述解决方案的较短版本,例如第一个解决方案?

【问题讨论】:

    标签: python python-3.x list for-loop


    【解决方案1】:

    您可以在列表推导中检查被零除的情况,如下所示:

    A = [170,170,150]
    b = 160
    C = [2,1]
    xb = [b/(k-1) if k != 1 else 0 for k in C]
    print(xb)
    

    输出:

    [160.0, 0]
    

    【讨论】:

    • 谢谢,正是我想要的!
    【解决方案2】:

    你的例子之一的解决方案

    A = [170,170,150]
    b = 160
    C = [2,1]
    xb = [b/(k-1) if k!=1 else 0 for k in C]
    print(xb)
    

    【讨论】:

    • 谢谢,正是我想要的!
    【解决方案3】:
    A = [170,170,150]
    b = 160
    C = [2,1]
    xb = [b/(k-1) if k != 1 else 0 for k in C]
    print(xb)
    

    【讨论】:

    • 谢谢,正是我想要的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    相关资源
    最近更新 更多