我正在尝试将应用程序版本号(如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')
建议我一些更好的选择!
答案 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开头,这应该有效,否则,不要将它们转换为整数。