如何将版本号转换为整数值?

时间:2017-01-07 00:49:39

标签: python

我正在尝试将应用程序版本号(如5.3.0.1(Android)和5.3.0(iOS))转换为Python中的整数。该函数应该为Android提供输出值5301,为iOS提供530输出值。

我编写了以下代码,但希望将其缩小和改进:

users = userComment.objects.filter(Q(Q(sender=request.user) & Q(recipient=username)) | Q(Q(sender=username) & Q(recipient=request.user))).order_by('sent_at')

建议我一些更好的选择!

6 个答案:

答案 0 :(得分:9)

也许更直接的东西:

major, minor, patch = [int(x, 10) for x in version.split('.')]

以上将为您提供版本号的每个组件。你也可以这样做:

l = [int(x, 10) for x in version.split('.')]
l.reverse()
version = sum(x * (100 ** i) for i, x in enumerate(l))

这将允许版本号的每个组件在0到99之间变化(而不是仅仅0到9)。在C中记录版本号是一种相当普遍的做法。

如果您真的只想处理版本在0到9范围内的组件,只需将100更改为10:

l = [int(x, 10) for x in version.split('.')]
l.reverse()
version = sum(x * (10 ** i) for i, x in enumerate(l))

答案 1 :(得分:1)

这对你有用吗?

int(''.join(x for x in version.split('.')))

答案 2 :(得分:1)

最简单的方法就是

version = "5.3.0"
int(version.replace(".", ""))

这会给你530

但是,如果版本以0开头,例如version = 0.1.1,则应该只执行

version.replace(".", "")

避免在前面失去0。

答案 3 :(得分:0)

这可以使用相当简单的生成器表达式来完成:

>>> version = "5.3.0"
>>> int(''.join(c for c in version if c != '.'))
530
>>> 

或者,您只需使用.split()并为自己节省一步:

>>> version = "5.3.0"
>>> int(''.join(version.split(".")))
530
>>> 

如果性能很重要,以下是从不同答案编译的各种方法的时间安排:

Method: int(version.replace(".", ""))
Time: 0.4673201900150161
---------
Method: int(''.join(x for x in version.split('.')))
Time: 1.2946192430099472
---------
Method: int(''.join(c for c in version if c != '.'))
Time: 1.248846340982709
---------
Method: int(''.join(version.split(".")))
Time: 0.5846817549900152
---------
Method: [int(x, 10) for x in version.split('.')]
Time: 1.2502875960199162

免责声明:我不赞同,赞扬或推荐上述任何解决方案。归功于原作者。上图的目的是为OP提供相当准确的每种方法性能测量。

答案 4 :(得分:0)

在Python 2 1 中,使用translate方法:

version = "5.3.0"
print "Prior:",version
version = int(version.translate(None, '.'))
print "After:",version

给出了:

Prior: 5.3.0
After: 530

1 Python3,中,可比较的脚本将是:

version = "5.3.0"
print("Prior:",version)
version = int(version.translate({ord('.'): None}))
print("After:",version)

答案 5 :(得分:-1)

version = "5.3.0"

int(version.replace(".", ""))
# 530

只要版本不以0开头,这应该有效,否则,不要将它们转换为整数。