python - 使用python的版本比较错误
问题描述
我有以下 python 代码比较两个版本 v1 和 v2 并输出以下内容:
0 = version's are same
1 = v1 > v2
-1 = v2 > v1
代码如下:
class Solution(object):
def compareVersion(self, version1, version2):
n1, n2 = len(version1), len(version2)
i, j = 0, 0
while i < n1 or j < n2:
v1, v2 = 0, 0
while i < n1 and version1[i] != '.':
v1 = v1*10 + int(version1[i])
i += 1
while j < n2 and version2[j] != '.':
v2 = v2*10 + int(version2[j])
j += 1
if v1 != v2:
return 1 if v1 > v2 else -1
i += 1
j += 1
return 0
if __name__ == "__main__":
print (Solution().compareVersion("2.10", "2.06"))
上面的代码输出如下,因为 v1> v2。
1
但是,当我键入
if __name__ == "__main__":
print (Solution().compareVersion("2.1", "2.06"))
输出是
-1`
如何在此处解决此问题,由于缺少零,输出不正确。
解决方案
在点处拆分字符串并将数字视为整数:
>>> version_string = "2.06"
>>> version_as_integers = tuple(int(segment) for segment in version_string.split('.'))
>>> version_as_integers
(2, 6)
然后,只需比较版本:
if version_1_as_integers < version_2_as_integers:
return -1
elif version_1_as_integers == version_2_as_integers:
return 0
else:
return 1
完整的解决方案:
def version_to_integers(version_string):
return tuple(int(segment) for segment in version_string.split('.'))
def compare_versions(version_string_1, version_string_2):
v1 = version_to_integers(version_string_1)
v2 = version_to_integers(version_string_2)
return ((v1 > v2) - (v1 < v2))
推荐阅读
- c++ - 将对 main() 中的局部变量的引用传递给其他线程/函数是不好的做法吗?
- api - 如何从 API 检索沃尔玛产品
- api - 无法使用邮递员创建史诗
- python - 如果我已经打乱了一个数组`a`来获得一个数组`b`,我怎样才能获得一个索引数组'`i`使得`b [i] == a`?
- python-3.x - 我们如何从多字典创建 pyspark 数据框
- wordpress - WooCommerce/Elementor 分页更改整个页面
- javascript - 如何将项目添加到承诺之外的数组
- java - 在 AWS Lambda 中创建数据库服务
- python - 用matplotlib填充曲线下的区域
- json - 将 BTC 历史数据导入电子表格