我正在使用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(这是一个字符串)之间的比较吗?
使用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 == '-':
)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
@LukeSharon您可以尝试/排除错误吗?
我会尝试一下。
@LukeSharon我用一个可能适合您的示例更新了我的答案!
非常感谢你。我感谢您的帮助!!!