Warm tip: This article is reproduced from serverfault.com, please click

algorithm-如何在Python中使用无穷大

(algorithm - How to use infinity in python)

发布于 2020-11-28 19:12:11

我正在使用python中的图形。我想获得每个顶点之间的距离。对于一个顶点与另一个顶点之间没有直接路径的情况,我需要使用值INFINITY(用字符串“-”表示)。我尝试了几种解决方案。一个是使用疯狂的大整数表示无穷大。但是,我研究发现这是不好的做法。我还看到了一些使用数学模块的无穷函数的堆栈溢出解决方案。但是,这不适用于我的问题,因为我的INFINITY值正在UI中使用,并且必须在图形上令人愉悦。这就是为什么我的INFINITY必须保留为字符串“-”的原因。这是我在当前代码行中遇到的错误:

TypeError: '<' not supported between instances of 'str' and 'int'

我不确定,但我认为<来自我对min()函数的使用。

此错误来自以下代码:

for i in range(length):
    for j in range(length):
        for k in range(length):
            #print('40:', int(temp[j][i]), int(temp[i][k]))
            temp[j][k] = min(temp[j][k], addWithInfinity(temp[j][i],temp[i][k]))

Temp只是指一个矩阵,在我当前使用的方法中,该矩阵作为参数接收。这是我的addWithInfinity方法:

def addWithInfinity(a, b):
"""If a == INFINITY or b == INFINITY, returns INFINITY.
Otherwise, returns a + b."""
if a == LinkedDirectedGraph.INFINITY or b == LinkedDirectedGraph.INFINITY:
    return LinkedDirectedGraph.INFINITY
else: return a + b

我的问题是我正在尝试将infinity与infinity进行比较。我想将INFINITY转换为这样的int:int(INFINITY)(或int('-')),但是出现以下错误:

ValueError: invalid literal for int() with base 10: '-'

有什么想法可以摆脱int和INFINITY(这是一个字符串)之间的比较吗?

Questioner
Luke Sharon
Viewed
0
ti7 2020-11-29 03:40:54

使用float("inf")math.inf

另请参见如何在Python中表示无限数?

>>> float("inf") > 5
True
>>> float("inf") < 10**100
False
>>> import math
>>> float("inf") == math.inf
True

如果你需要使用除"inf"无穷大以外的其他值(例如'-'你的示例),则可以try/except使用

  • 检查初始值是否是你的目标字符串(if a == '-':
  • 解析调用float的错误(if "'-'" in str(err_string):
try:
    a = float(a)
except ValueError as ex:
    # special-case for ValueError: could not convert string to float: '-'
    if "'-'" in str(ex).split(":")[-1]:
        a = float("inf")
    else:  # re-raise other ValueErrors
        raise ex